From a383e282fcfe0f171c13c6cacdc92bdce6b06fc6 Mon Sep 17 00:00:00 2001 From: Alan Steremberg Date: Fri, 9 Jul 2021 06:47:03 -0700 Subject: [PATCH] new sys, new master clock, hdmi support --- .gitignore | 40 + build_id.v | 3 +- common/clkgen.vhd | 10 +- common/submodules/pll_pll_0.qip | 4 + common/submodules/pll_pll_0.v | 108 + common/submodules/pll_pll_1.qip | 4 + common/submodules/pll_pll_1.v | 99 + common/submodules/pll_pll_2.qip | 4 + common/submodules/pll_pll_2.v | 96 + emu.sv | 250 +- files.qip | 70 + jtag.cdf | 2 +- sharpmz-lite-div_assignment_defaults.qdf | 807 ----- sharpmz-lite-pll.sdc | 459 --- sharpmz-lite-pll_assignment_defaults.qdf | 807 ----- sharpmz-lite.qsf | 536 ---- sharpmz-lite.qws | Bin 619 -> 0 bytes sharpmz-lite.rbf | Bin 2966124 -> 0 bytes sharpmz-lite.sdc | 206 -- sharpmz-lite.srf | 17 - sharpmz-lite_assignment_defaults.qdf | 808 ----- sharpmz.qpf | 31 +- sharpmz.qsf | 398 +-- sharpmz.vhd | 2 +- sharpmz_assignment_defaults.qdf | 807 ----- sys/alsa.sv | 157 + sys/arcade_video.v | 302 ++ sys/ascal.vhd | 2564 +++++++++++++++ sys/audio_out.v | 296 ++ sys/build_id.tcl | 28 +- sys/ddr_svc.sv | 108 + sys/f2sdram_safe_terminator.sv | 250 ++ sys/gamma_corr.sv | 124 + sys/hdmi_config.sv | 65 +- sys/hdmi_lite.sv | 395 --- sys/{hps_io.v => hps_io.sv} | 0 sys/hq2x.sv | 274 +- sys/i2c.v | 80 +- sys/i2s.v | 128 +- sys/iir_filter.v | 213 ++ sys/ip/avalon_combiner.v | 60 - sys/ip/avalon_combiner_hw.tcl | 204 -- sys/ip/de10_hps_hw.tcl | 3706 ---------------------- sys/ip/in_split.v | 52 - sys/ip/in_split_hw.tcl | 104 - sys/ip/out_mix.v | 44 - sys/ip/out_mix_hw.tcl | 97 - sys/ip/reset_source.v | 50 - sys/ip/reset_source_hw.tcl | 152 - sys/lpf48k.sv | 100 - sys/ltc2308.sv | 162 + sys/math.sv | 109 + sys/mcp23009.sv | 113 + sys/mt32pi.sv | 283 ++ sys/osd.v | 245 +- sys/pattern_vg.v | 120 - sys/pll.13.qip | 17 + sys/pll_audio.13.qip | 17 + sys/pll_audio.qip | 337 ++ sys/pll_audio.v | 252 ++ sys/pll_audio/pll_audio_0002.qip | 4 + sys/pll_audio/pll_audio_0002.v | 87 + sys/pll_cfg.qip | 44 + sys/pll_cfg.v | 86 + sys/pll_cfg/altera_pll_reconfig_core.v | 2184 +++++++++++++ sys/pll_cfg/altera_pll_reconfig_top.v | 428 +++ sys/pll_hdmi.13.qip | 17 + sys/pll_hdmi.qip | 483 +++ sys/pll_hdmi.v | 256 ++ sys/pll_hdmi/pll_hdmi_0002.qip | 2 + sys/pll_hdmi/pll_hdmi_0002.v | 241 ++ sys/pll_hdmi_adj.vhd | 433 +++ sys/pll_q13.qip | 6 + sys/pll_q17.qip | 4 + sys/scandoubler.v | 250 +- sys/scanlines.v | 67 + sys/sd_card.sv | 463 +++ sys/spdif.v | 164 +- sys/sync_vg.v | 78 - sys/sys.qip | 57 +- sys/sys.tcl | 227 ++ sys/sys_analog.tcl | 71 + sys/sys_dual_sdram.tcl | 50 + sys/sys_top.sdc | 102 +- sys/sys_top.v | 2208 ++++++++----- sys/sysmem.sv | 395 +-- sys/vga_out.sv | 91 +- sys/video_cleaner.sv | 12 +- sys/video_freak.sv | 278 ++ sys/video_freezer.sv | 143 + sys/video_mixer.sv | 248 +- sys/vip.qsys | 1177 ------- sys/vip_config.sv | 159 - 93 files changed, 14116 insertions(+), 13175 deletions(-) create mode 100644 .gitignore create mode 100644 common/submodules/pll_pll_0.qip create mode 100644 common/submodules/pll_pll_0.v create mode 100644 common/submodules/pll_pll_1.qip create mode 100644 common/submodules/pll_pll_1.v create mode 100644 common/submodules/pll_pll_2.qip create mode 100644 common/submodules/pll_pll_2.v create mode 100644 files.qip delete mode 100644 sharpmz-lite-div_assignment_defaults.qdf delete mode 100644 sharpmz-lite-pll.sdc delete mode 100644 sharpmz-lite-pll_assignment_defaults.qdf delete mode 100644 sharpmz-lite.qsf delete mode 100644 sharpmz-lite.qws delete mode 100644 sharpmz-lite.rbf delete mode 100644 sharpmz-lite.sdc delete mode 100644 sharpmz-lite.srf delete mode 100644 sharpmz-lite_assignment_defaults.qdf delete mode 100644 sharpmz_assignment_defaults.qdf create mode 100644 sys/alsa.sv create mode 100644 sys/arcade_video.v create mode 100644 sys/ascal.vhd create mode 100644 sys/audio_out.v create mode 100644 sys/ddr_svc.sv create mode 100644 sys/f2sdram_safe_terminator.sv create mode 100644 sys/gamma_corr.sv delete mode 100644 sys/hdmi_lite.sv rename sys/{hps_io.v => hps_io.sv} (100%) create mode 100644 sys/iir_filter.v delete mode 100644 sys/ip/avalon_combiner.v delete mode 100644 sys/ip/avalon_combiner_hw.tcl delete mode 100644 sys/ip/de10_hps_hw.tcl delete mode 100644 sys/ip/in_split.v delete mode 100644 sys/ip/in_split_hw.tcl delete mode 100644 sys/ip/out_mix.v delete mode 100644 sys/ip/out_mix_hw.tcl delete mode 100644 sys/ip/reset_source.v delete mode 100644 sys/ip/reset_source_hw.tcl delete mode 100644 sys/lpf48k.sv create mode 100644 sys/ltc2308.sv create mode 100644 sys/math.sv create mode 100644 sys/mcp23009.sv create mode 100644 sys/mt32pi.sv delete mode 100644 sys/pattern_vg.v create mode 100644 sys/pll.13.qip create mode 100644 sys/pll_audio.13.qip create mode 100644 sys/pll_audio.qip create mode 100644 sys/pll_audio.v create mode 100644 sys/pll_audio/pll_audio_0002.qip create mode 100644 sys/pll_audio/pll_audio_0002.v create mode 100644 sys/pll_cfg.qip create mode 100644 sys/pll_cfg.v create mode 100644 sys/pll_cfg/altera_pll_reconfig_core.v create mode 100644 sys/pll_cfg/altera_pll_reconfig_top.v create mode 100644 sys/pll_hdmi.13.qip create mode 100644 sys/pll_hdmi.qip create mode 100644 sys/pll_hdmi.v create mode 100644 sys/pll_hdmi/pll_hdmi_0002.qip create mode 100644 sys/pll_hdmi/pll_hdmi_0002.v create mode 100644 sys/pll_hdmi_adj.vhd create mode 100644 sys/pll_q13.qip create mode 100644 sys/pll_q17.qip create mode 100644 sys/scanlines.v create mode 100644 sys/sd_card.sv delete mode 100644 sys/sync_vg.v create mode 100644 sys/sys.tcl create mode 100644 sys/sys_analog.tcl create mode 100644 sys/sys_dual_sdram.tcl create mode 100644 sys/video_freak.sv create mode 100644 sys/video_freezer.sv delete mode 100644 sys/vip.qsys delete mode 100644 sys/vip_config.sv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4ae7f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +db +greybox_tmp +incremental_db +output_files +simulation +hc_output +scaler +hps_isw_handoff +vip +*_sim +.qsys_edit +PLLJ_PLLSPE_INFO.txt +*.bak +*.orig +*.rej +*.qdf +*.rpt +*.smsg +*.summary +*.done +*.jdi +*.pin +*.sof +*.qws +*.ppf +*.ddb +build_id.v +c5_pin_model_dump.txt +*.sopcinfo +*.csv +*.f +*.cmp +*.sip +*.spd +*.bsf +*~ +*.xml +*_netlist +*.cdf +**/.DS_Store \ No newline at end of file diff --git a/build_id.v b/build_id.v index c8e54ad..68929f3 100644 --- a/build_id.v +++ b/build_id.v @@ -1,2 +1 @@ -`define BUILD_DATE "200430" -`define BUILD_TIME "002036" +`define BUILD_DATE "210709" \ No newline at end of file diff --git a/common/clkgen.vhd b/common/clkgen.vhd index ae7eeef..c47cf98 100644 --- a/common/clkgen.vhd +++ b/common/clkgen.vhd @@ -106,6 +106,7 @@ signal PLLLOCKED2 : std_logic; signal PLLLOCKED3 : std_logic; signal CK448Mi : std_logic; -- 448MHz signal CK112Mi : std_logic; -- 112MHz +signal CKMasteri : std_logic; -- master clock -- change to allow us to run the clock slower, improve timing signal CK64Mi : std_logic; -- 64MHz signal CK56M750i : std_logic; -- 56MHz signal CK32Mi : std_logic; -- 32MHz @@ -243,6 +244,9 @@ begin locked => PLLLOCKED3 -- PLL locked. ); + + CKMasteri <= CK56M750i; + -- -- Clock Generator - Basic divide circuit for higher end frequencies. -- @@ -546,7 +550,7 @@ begin -- Process the clocks according to the user selections and assign. -- - process (RST, PLLLOCKED1, PLLLOCKED2, PLLLOCKED3, CK112Mi) + process (RST, PLLLOCKED1, PLLLOCKED2, PLLLOCKED3, CKMasteri) begin if RST = '1' or PLLLOCKED1 = '0' or PLLLOCKED2 = '0' or PLLLOCKED3 = '0' then CKENCPUi <= '0'; @@ -558,7 +562,7 @@ begin CKVIDEOi <= '0'; PEREDGE <= "00"; - elsif rising_edge(CK112Mi) then + elsif rising_edge(CKMasteri) then -- Once the rising edge of the CPU clock is detected, enable the CPU Clock Enable signal -- which is used to enable the master clock onto the logic. @@ -781,7 +785,7 @@ begin -- Assign necessary clocks and enables. -- - CLKBUS(CKMASTER) <= CK112Mi; + CLKBUS(CKMASTER) <= CKMasteri; CLKBUS(CKSOUND) <= CKSOUNDi; -- Sound base clock, 50/50 duty cycle. CLKBUS(CKRTC) <= CKRTCi; -- RTC base clock, 50/50 duty cycle. CLKBUS(CKENVIDEO) <= CKENVIDEOi; -- Enable signal for video base clock. diff --git a/common/submodules/pll_pll_0.qip b/common/submodules/pll_pll_0.qip new file mode 100644 index 0000000..d3272ad --- /dev/null +++ b/common/submodules/pll_pll_0.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE NORMAL -to "*pll_pll_0*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_pll_0*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_pll_0*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_pll_0*|altera_pll:altera_pll_i*|*" diff --git a/common/submodules/pll_pll_0.v b/common/submodules/pll_pll_0.v new file mode 100644 index 0000000..87bc175 --- /dev/null +++ b/common/submodules/pll_pll_0.v @@ -0,0 +1,108 @@ +`timescale 1ns/10ps +module pll_pll_0( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'outclk1' + output wire outclk_1, + + // interface 'outclk2' + output wire outclk_2, + + // interface 'outclk3' + output wire outclk_3, + + // interface 'outclk4' + output wire outclk_4, + + // interface 'outclk5' + output wire outclk_5, + + // interface 'outclk6' + output wire outclk_6, + + // interface 'outclk7' + output wire outclk_7, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("50.0 MHz"), + .operation_mode("normal"), + .number_of_clocks(8), + .output_clock_frequency0("255.999872 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("109.714257 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("63.999981 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("31.999989 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("15.999994 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("7.999996 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("3.999998 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("1.999999 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_7, outclk_6, outclk_5, outclk_4, outclk_3, outclk_2, outclk_1, outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/common/submodules/pll_pll_1.qip b/common/submodules/pll_pll_1.qip new file mode 100644 index 0000000..a5ee3a6 --- /dev/null +++ b/common/submodules/pll_pll_1.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE NORMAL -to "*pll_pll_1*|altera_pll:altera_pll_i*|*" + +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_pll_1*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_pll_1*|altera_pll:altera_pll_i*|*" diff --git a/common/submodules/pll_pll_1.v b/common/submodules/pll_pll_1.v new file mode 100644 index 0000000..e01e8ad --- /dev/null +++ b/common/submodules/pll_pll_1.v @@ -0,0 +1,99 @@ +`timescale 1ns/10ps +module pll_pll_1( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'outclk1' + output wire outclk_1, + + // interface 'outclk2' + output wire outclk_2, + + // interface 'outclk3' + output wire outclk_3, + + // interface 'outclk4' + output wire outclk_4, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("false"), + .reference_clock_frequency("256.0 MHz"), + .operation_mode("normal"), + .number_of_clocks(5), + .output_clock_frequency0("56.748768 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("28.374384 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("14.187192 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("7.093596 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("3.546798 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_4, outclk_3, outclk_2, outclk_1, outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/common/submodules/pll_pll_2.qip b/common/submodules/pll_pll_2.qip new file mode 100644 index 0000000..21d10bf --- /dev/null +++ b/common/submodules/pll_pll_2.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE NORMAL -to "*pll_pll_2*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_pll_2*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_pll_2*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_pll_2*|altera_pll:altera_pll_i*|*" diff --git a/common/submodules/pll_pll_2.v b/common/submodules/pll_pll_2.v new file mode 100644 index 0000000..222ccad --- /dev/null +++ b/common/submodules/pll_pll_2.v @@ -0,0 +1,96 @@ +`timescale 1ns/10ps +module pll_pll_2( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'outclk1' + output wire outclk_1, + + // interface 'outclk2' + output wire outclk_2, + + // interface 'outclk3' + output wire outclk_3, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("256.0 MHz"), + .operation_mode("normal"), + .number_of_clocks(4), + .output_clock_frequency0("31.099998 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("25.176188 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("17.821346 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("8.860892 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("0 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_3, outclk_2, outclk_1, outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/emu.sv b/emu.sv index 02530d3..c17458f 100644 --- a/emu.sv +++ b/emu.sv @@ -30,98 +30,189 @@ module emu ( - //Master input clocks - input CLK_50M, + //Master input clock + input CLK_50M, - //Async reset from top-level module. - //Can be used as initial reset. - input RESET, + //Async reset from top-level module. + //Can be used as initial reset. + input RESET, - //Must be passed to hps_io module - inout [44:0] HPS_BUS, + //Must be passed to hps_io module + inout [45:0] HPS_BUS, - //Base video clock. Usually equals to CLK_SYS. - output CLK_VIDEO, + //Base video clock. Usually equals to CLK_SYS. + output CLK_VIDEO, - //Multiple resolutions are supported using different CE_PIXEL rates. - //Must be based on CLK_VIDEO - output CE_PIXEL, + //Multiple resolutions are supported using different CE_PIXEL rates. + //Must be based on CLK_VIDEO + output CE_PIXEL, - //Video aspect ratio for HDMI. Most retro systems have ratio 4:3. - output [7:0] VIDEO_ARX, - output [7:0] VIDEO_ARY, + //Video aspect ratio for HDMI. Most retro systems have ratio 4:3. + //if VIDEO_ARX[12] or VIDEO_ARY[12] is set then [11:0] contains scaled size instead of aspect ratio. + output [12:0] VIDEO_ARX, + output [12:0] VIDEO_ARY, - // These video signals are defined in sys_top.v, via the video_mixer we output the video from the emulator onto these - // signals, which then get passed as follows: - // emu -> video_mixer -> vga_osd -> vga_out - output [7:0] VGA_R, - output [7:0] VGA_G, - output [7:0] VGA_B, - output VGA_HS, - output VGA_VS, - output VGA_DE, // = ~(VBlank | HBlank) + output [7:0] VGA_R, + output [7:0] VGA_G, + output [7:0] VGA_B, + output VGA_HS, + output VGA_VS, + output VGA_DE, // = ~(VBlank | HBlank) + output VGA_F1, + output [1:0] VGA_SL, + output VGA_SCALER, // Force VGA scaler - output LED_USER, // 1 - ON, 0 - OFF. + input [11:0] HDMI_WIDTH, + input [11:0] HDMI_HEIGHT, + output HDMI_FREEZE, - // b[1]: 0 - LED status is system status OR'd with b[0] - // 1 - LED status is controled solely by b[0] - // hint: supply 2'b00 to let the system control the LED. - output [1:0] LED_POWER, - output [1:0] LED_DISK, - output [7:0] LED_MB, +`ifdef MISTER_FB + // Use framebuffer in DDRAM (USE_FB=1 in qsf) + // FB_FORMAT: + // [2:0] : 011=8bpp(palette) 100=16bpp 101=24bpp 110=32bpp + // [3] : 0=16bits 565 1=16bits 1555 + // [4] : 0=RGB 1=BGR (for 16/24/32 modes) + // + // FB_STRIDE either 0 (rounded to 256 bytes) or multiple of pixel size (in bytes) + output FB_EN, + output [4:0] FB_FORMAT, + output [11:0] FB_WIDTH, + output [11:0] FB_HEIGHT, + output [31:0] FB_BASE, + output [13:0] FB_STRIDE, + input FB_VBL, + input FB_LL, + output FB_FORCE_BLANK, - output [15:0] AUDIO_L, - output [15:0] AUDIO_R, - output AUDIO_S, // 1 - signed audio samples, 0 - unsigned - output [1:0] AUDIO_MIX, // 0 - no mix, 1 - 25%, 2 - 50%, 3 - 100% (mono) -// input TAPE_IN, +`ifdef MISTER_FB_PALETTE + // Palette control for 8bit modes. + // Ignored for other video modes. + output FB_PAL_CLK, + output [7:0] FB_PAL_ADDR, + output [23:0] FB_PAL_DOUT, + input [23:0] FB_PAL_DIN, + output FB_PAL_WR, +`endif +`endif - // SD-SPI - output SD_SCK, - output SD_MOSI, - input SD_MISO, - output SD_CS, - input SD_CD, + output LED_USER, // 1 - ON, 0 - OFF. - //High latency DDR3 RAM interface - //Use for non-critical time purposes - output DDRAM_CLK, - input DDRAM_BUSY, - output [7:0] DDRAM_BURSTCNT, - output [28:0] DDRAM_ADDR, - input [63:0] DDRAM_DOUT, - input DDRAM_DOUT_READY, - output DDRAM_RD, - output [63:0] DDRAM_DIN, - output [7:0] DDRAM_BE, - output DDRAM_WE, + // b[1]: 0 - LED status is system status OR'd with b[0] + // 1 - LED status is controled solely by b[0] + // hint: supply 2'b00 to let the system control the LED. + output [1:0] LED_POWER, + output [1:0] LED_DISK, - //SDRAM interface with lower latency -// ,output SDRAM_CLK, -// output SDRAM_CKE, -// output [12:0] SDRAM_A, -// output [1:0] SDRAM_BA, -// inout [15:0] SDRAM_DQ, -// output SDRAM_DQML, -// output SDRAM_DQMH, -// output SDRAM_nCS, -// output SDRAM_nCAS, -// output SDRAM_nRAS, -// output SDRAM_nWE - input UART_RX, - output UART_TX + // I/O board button press simulation (active high) + // b[1]: user button + // b[0]: osd button + output [1:0] BUTTONS, + + input CLK_AUDIO, // 24.576 MHz + output [15:0] AUDIO_L, + output [15:0] AUDIO_R, + output AUDIO_S, // 1 - signed audio samples, 0 - unsigned + output [1:0] AUDIO_MIX, // 0 - no mix, 1 - 25%, 2 - 50%, 3 - 100% (mono) + + //ADC + inout [3:0] ADC_BUS, + + //SD-SPI + output SD_SCK, + output SD_MOSI, + input SD_MISO, + output SD_CS, + input SD_CD, + + //High latency DDR3 RAM interface + //Use for non-critical time purposes + output DDRAM_CLK, + input DDRAM_BUSY, + output [7:0] DDRAM_BURSTCNT, + output [28:0] DDRAM_ADDR, + input [63:0] DDRAM_DOUT, + input DDRAM_DOUT_READY, + output DDRAM_RD, + output [63:0] DDRAM_DIN, + output [7:0] DDRAM_BE, + output DDRAM_WE, + + //SDRAM interface with lower latency + output SDRAM_CLK, + output SDRAM_CKE, + output [12:0] SDRAM_A, + output [1:0] SDRAM_BA, + inout [15:0] SDRAM_DQ, + output SDRAM_DQML, + output SDRAM_DQMH, + output SDRAM_nCS, + output SDRAM_nCAS, + output SDRAM_nRAS, + output SDRAM_nWE, + +`ifdef MISTER_DUAL_SDRAM + //Secondary SDRAM + //Set all output SDRAM_* signals to Z ASAP if SDRAM2_EN is 0 + input SDRAM2_EN, + output SDRAM2_CLK, + output [12:0] SDRAM2_A, + output [1:0] SDRAM2_BA, + inout [15:0] SDRAM2_DQ, + output SDRAM2_nCS, + output SDRAM2_nCAS, + output SDRAM2_nRAS, + output SDRAM2_nWE, +`endif + + input UART_CTS, + output UART_RTS, + input UART_RXD, + output UART_TXD, + output UART_DTR, + input UART_DSR, + + // Open-drain User port. + // 0 - D+/RX + // 1 - D-/TX + // 2..6 - USR2..USR6 + // Set USER_OUT to 1 to read from USER_IN. + input [6:0] USER_IN, + output [6:0] USER_OUT, + + input OSD_STATUS ); -//assign {SD_SCK, SD_MOSI, SD_CS} = 'Z; -//assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = 'Z; -assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DDRAM_WE} = 0; +///////// Default values for ports not used in this core ///////// + +assign ADC_BUS = 'Z; +assign USER_OUT = '1; +assign {UART_RTS, UART_TXD, UART_DTR} = 0; +assign {SD_SCK, SD_MOSI, SD_CS} = 'Z; +assign {SDRAM_DQ, SDRAM_A, SDRAM_BA, SDRAM_CLK, SDRAM_CKE, SDRAM_DQML, SDRAM_DQMH, SDRAM_nWE, SDRAM_nCAS, SDRAM_nRAS, SDRAM_nCS} = 'Z; +assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DDRAM_WE} = '0; + +assign VGA_SL = 0; +assign VGA_F1 = 0; +assign VGA_SCALER = 0; +assign HDMI_FREEZE = 0; + + +assign LED_DISK = 0; +assign LED_POWER = 0; +assign BUTTONS = 0; + assign LED_USER = ioctl_download; assign LED_DISK = 0; assign LED_POWER = 0; -assign VIDEO_ARX = status[1] ? 8'd16 : 8'd4; -assign VIDEO_ARY = status[1] ? 8'd9 : 8'd3; +wire [1:0] ar = status[9:8]; + +assign VIDEO_ARX = (!ar) ? 12'd4 : (ar - 1'd1); +assign VIDEO_ARY = (!ar) ? 12'd3 : 12'd0; + + + wire [2:0] scale = status[4:2]; @@ -132,13 +223,16 @@ localparam CONF_STR = { "SHARP MZ SERIES;;", "J,Fire;", - "V,v1.02.",`BUILD_DATE + "V,v",`BUILD_DATE }; ///////////////// CLOCKS //////////////////////// wire clk_sys; + + + ///////////////// HPS /////////////////////////// wire [31:0] status; @@ -158,6 +252,8 @@ wire [15:0] ioctl_din; wire forced_scandoubler; hps_io #(.STRLEN(($size(CONF_STR)>>3))) hps_io + +//hps_io #(.CONF_STR(CONF_STR)) hps_io ( .clk_sys(clk_sys), .HPS_BUS(HPS_BUS), @@ -251,6 +347,7 @@ bridge sharp_mz // Clocks output by the emulator. .clkvid(clk_video_in), + //.cepix(cepix), // Reset .cold_reset(reset), @@ -297,10 +394,11 @@ bridge sharp_mz // If ce_pix is same as pixel clock, uncomment below and remove CE_PIXEL from .ce_pix_out below. // //assign CE_PIXEL=1; -//assign CLK_VIDEO = clk_sys; -assign CLK_VIDEO = clk_video_in; +assign CLK_VIDEO = clk_sys; +//assign CLK_VIDEO = clk_video_in; assign CE_PIXEL = clk_video_in; + assign VGA_R = R_emu; assign VGA_G = G_emu; assign VGA_B = B_emu; diff --git a/files.qip b/files.qip new file mode 100644 index 0000000..3cdda53 --- /dev/null +++ b/files.qip @@ -0,0 +1,70 @@ +set_global_assignment -name VHDL_FILE jtag_uart_0.vhd +set_global_assignment -name SYSTEMVERILOG_FILE emu.sv +set_global_assignment -name VHDL_FILE common/config_pkg.vhd +set_global_assignment -name VHDL_FILE bridge.vhd +set_global_assignment -name VHDL_FILE sharpmz.vhd + +#============================================================ +# Latest T80 CPU +#============================================================ +set_global_assignment -name VHDL_FILE common/T80/T80.vhd +set_global_assignment -name VHDL_FILE common/T80/T8080se.vhd +set_global_assignment -name VHDL_FILE common/T80/T80_ALU.vhd +set_global_assignment -name VHDL_FILE common/T80/T80_MCode.vhd +set_global_assignment -name VHDL_FILE common/T80/T80_Pack.vhd +set_global_assignment -name VHDL_FILE common/T80/T80_Reg.vhd +set_global_assignment -name VHDL_FILE common/T80/T80a.vhd +set_global_assignment -name VHDL_FILE common/T80/T80se.vhd +set_global_assignment -name VHDL_FILE common/T80/T80sed.vhd + +#============================================================ +# i8253 Programmable Interval Timer +#============================================================ +set_global_assignment -name VHDL_FILE common/i8254/i8254_counter.vhd +set_global_assignment -name VHDL_FILE common/i8254/i8254.vhd + +#============================================================ +# i8255 Programmable Peripheral Interface +#============================================================ +set_global_assignment -name VHDL_FILE common/i8255/i8255.vhd +#set_global_assignment -name VHDL_FILE mz80b/i8255/i8255.vhd + +#============================================================ +# MZ80C specific modules. +#============================================================ +set_global_assignment -name VHDL_FILE mz80c/mz80c.vhd + +#============================================================ +# MZ80B specific modules. +#============================================================ +#set_global_assignment -name VHDL_FILE mz80b/mz80b_dummy.vhd +set_global_assignment -name VHDL_FILE mz80b/mz80b.vhd + + + +#============================================================ +# PLL +#============================================================ +set_global_assignment -name QIP_FILE common/pll.qip +set_global_assignment -name VHDL_FILE common/clkgen.vhd +#set_global_assignment -name QIP_FILE common/pll_1.qip +#set_global_assignment -name QIP_FILE common/pll_2.qip +#set_global_assignment -name QIP_FILE common/pll_4.qip + +#============================================================ +# Common modules +#============================================================ +set_global_assignment -name VHDL_FILE common/dprom.vhd +set_global_assignment -name VHDL_FILE common/clk_div.vhd +set_global_assignment -name VHDL_FILE common/mctrl.vhd +set_global_assignment -name VHDL_FILE common/dpram.vhd +set_global_assignment -name VHDL_FILE common/keymatrix.vhd +set_global_assignment -name VHDL_FILE common/video.vhd +set_global_assignment -name VHDL_FILE common/cmt.vhd +set_global_assignment -name VHDL_FILE common/z8420/z8420.vhd +set_global_assignment -name VHDL_FILE common/z8420/Interrupt.vhd + +#============================================================ +# Functions +#============================================================ +set_global_assignment -name VHDL_FILE common/functions.vhd diff --git a/jtag.cdf b/jtag.cdf index f94d545..56ad529 100644 --- a/jtag.cdf +++ b/jtag.cdf @@ -5,7 +5,7 @@ JedecChain; P ActionCode(Ign) Device PartName(SOCVHPS) MfrSpec(OpMask(0)); P ActionCode(Cfg) - Device PartName(5CSEBA6U23I7) Path("output_files/") File("sharpmz-lite.sof") MfrSpec(OpMask(1)); + Device PartName(5CSEBA6U23I7) Path("output_files/") File("sharpmz.sof") MfrSpec(OpMask(1)); ChainEnd; AlteraBegin; diff --git a/sharpmz-lite-div_assignment_defaults.qdf b/sharpmz-lite-div_assignment_defaults.qdf deleted file mode 100644 index 92b284a..0000000 --- a/sharpmz-lite-div_assignment_defaults.qdf +++ /dev/null @@ -1,807 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel FPGA IP License Agreement, or other applicable license -# agreement, including, without limitation, that your use is for -# the sole purpose of programming logic devices manufactured by -# Intel and sold by Intel or its authorized distributors. Please -# refer to the applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 17.1.1 Internal Build 593 12/11/2017 SJ Standard Edition -# Date created = 17:23:05 October 20, 2018 -# -# -------------------------------------------------------------------------- # -# -# Note: -# -# 1) Do not modify this file. This file was generated -# automatically by the Quartus Prime software and is used -# to preserve global assignments across Quartus Prime versions. -# -# -------------------------------------------------------------------------- # - -set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off -set_global_assignment -name IP_COMPONENT_INTERNAL Off -set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On -set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off -set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off -set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db -set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off -set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off -set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off -set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off -set_global_assignment -name HC_OUTPUT_DIR hc_output -set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off -set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On -set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off -set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" -set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On -set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On -set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off -set_global_assignment -name REVISION_TYPE Base -family "Arria V" -set_global_assignment -name REVISION_TYPE Base -family "Stratix V" -set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" -set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" -set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" -set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On -set_global_assignment -name DO_COMBINED_ANALYSIS Off -set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off -set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off -set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off -set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off -set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On -set_global_assignment -name TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "MAX 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone V" -set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" -set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "MAX 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone V" -set_global_assignment -name OPTIMIZATION_MODE Balanced -set_global_assignment -name ALLOW_REGISTER_MERGING On -set_global_assignment -name ALLOW_REGISTER_DUPLICATION On -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix IV" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Arria 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX II" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone V" -set_global_assignment -name MUX_RESTRUCTURE Auto -set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off -set_global_assignment -name ENABLE_IP_DEBUG Off -set_global_assignment -name SAVE_DISK_SPACE On -set_global_assignment -name OCP_HW_EVAL Enable -set_global_assignment -name DEVICE_FILTER_PACKAGE Any -set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any -set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" -set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 -set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name TRUE_WYSIWYG_FLOW Off -set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off -set_global_assignment -name STATE_MACHINE_PROCESSING Auto -set_global_assignment -name SAFE_STATE_MACHINE Off -set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On -set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On -set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off -set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 -set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 -set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On -set_global_assignment -name PARALLEL_SYNTHESIS On -set_global_assignment -name DSP_BLOCK_BALANCING Auto -set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" -set_global_assignment -name NOT_GATE_PUSH_BACK On -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On -set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off -set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On -set_global_assignment -name IGNORE_CARRY_BUFFERS Off -set_global_assignment -name IGNORE_CASCADE_BUFFERS Off -set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_LCELL_BUFFERS Off -set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO -set_global_assignment -name IGNORE_SOFT_BUFFERS On -set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off -set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off -set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On -set_global_assignment -name AUTO_GLOBAL_OE_MAX On -set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off -set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut -set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed -set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name ALLOW_XOR_GATE_USAGE On -set_global_assignment -name AUTO_LCELL_INSERTION On -set_global_assignment -name CARRY_CHAIN_LENGTH 48 -set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 -set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name CASCADE_CHAIN_LENGTH 2 -set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 -set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 -set_global_assignment -name AUTO_CARRY_CHAINS On -set_global_assignment -name AUTO_CASCADE_CHAINS On -set_global_assignment -name AUTO_PARALLEL_EXPANDERS On -set_global_assignment -name AUTO_OPEN_DRAIN_PINS On -set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off -set_global_assignment -name AUTO_ROM_RECOGNITION On -set_global_assignment -name AUTO_RAM_RECOGNITION On -set_global_assignment -name AUTO_DSP_RECOGNITION On -set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto -set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On -set_global_assignment -name STRICT_RAM_RECOGNITION Off -set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On -set_global_assignment -name FORCE_SYNCH_CLEAR Off -set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On -set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off -set_global_assignment -name AUTO_RESOURCE_SHARING Off -set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off -set_global_assignment -name MAX7000_FANIN_PER_CELL 100 -set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On -set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" -set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off -set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" -set_global_assignment -name REPORT_PARAMETER_SETTINGS On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On -set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On -set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" -set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" -set_global_assignment -name HDL_MESSAGE_LEVEL Level2 -set_global_assignment -name USE_HIGH_SPEED_ADDER Auto -set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 -set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 -set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 -set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off -set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 -set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 -set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On -set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off -set_global_assignment -name BLOCK_DESIGN_NAMING Auto -set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off -set_global_assignment -name SYNTHESIS_EFFORT Auto -set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On -set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off -set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium -set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" -set_global_assignment -name MAX_LABS "-1 (Unlimited)" -set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On -set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" -set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On -set_global_assignment -name PRPOF_ID Off -set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off -set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On -set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off -set_global_assignment -name AUTO_MERGE_PLLS On -set_global_assignment -name IGNORE_MODE_FOR_MERGE Off -set_global_assignment -name TXPMA_SLEW_RATE Low -set_global_assignment -name ADCE_ENABLED Auto -set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal -set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off -set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 -set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS Off -set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off -set_global_assignment -name DEVICE AUTO -set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off -set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On -set_global_assignment -name ENABLE_NCEO_OUTPUT Off -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name STRATIXIII_UPDATE_MODE Standard -set_global_assignment -name STRATIX_UPDATE_MODE Standard -set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" -set_global_assignment -name CVP_MODE Off -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" -set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" -set_global_assignment -name USE_CONF_DONE AUTO -set_global_assignment -name USE_PWRMGT_SCL AUTO -set_global_assignment -name USE_PWRMGT_SDA AUTO -set_global_assignment -name USE_PWRMGT_ALERT AUTO -set_global_assignment -name USE_INIT_DONE AUTO -set_global_assignment -name USE_CVP_CONFDONE AUTO -set_global_assignment -name USE_SEU_ERROR AUTO -set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name USER_START_UP_CLOCK Off -set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off -set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off -set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On -set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On -set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -set_global_assignment -name ENABLE_VREFA_PIN Off -set_global_assignment -name ENABLE_VREFB_PIN Off -set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off -set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off -set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off -set_global_assignment -name INIT_DONE_OPEN_DRAIN On -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name ENABLE_CONFIGURATION_PINS On -set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off -set_global_assignment -name ENABLE_NCE_PIN Off -set_global_assignment -name ENABLE_BOOT_SEL_PIN On -set_global_assignment -name CRC_ERROR_CHECKING Off -set_global_assignment -name INTERNAL_SCRUBBING Off -set_global_assignment -name PR_ERROR_OPEN_DRAIN On -set_global_assignment -name PR_READY_OPEN_DRAIN On -set_global_assignment -name ENABLE_CVP_CONFDONE Off -set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On -set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" -set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" -set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 -set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" -set_global_assignment -name OPTIMIZE_SSN Off -set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" -set_global_assignment -name ECO_OPTIMIZE_TIMING Off -set_global_assignment -name ECO_REGENERATE_REPORT Off -set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal -set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically -set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically -set_global_assignment -name SEED 1 -set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF -set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off -set_global_assignment -name SLOW_SLEW_RATE Off -set_global_assignment -name PCI_IO Off -set_global_assignment -name TURBO_BIT On -set_global_assignment -name WEAK_PULL_UP_RESISTOR Off -set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off -set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off -set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On -set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto -set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto -set_global_assignment -name NORMAL_LCELL_INSERT On -set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" -set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF -set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off -set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off -set_global_assignment -name AUTO_TURBO_BIT ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off -set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off -set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On -set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off -set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off -set_global_assignment -name FITTER_EFFORT "Auto Fit" -set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal -set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto -set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto -set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off -set_global_assignment -name AUTO_GLOBAL_CLOCK On -set_global_assignment -name AUTO_GLOBAL_OE On -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic -set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off -set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" -set_global_assignment -name ENABLE_HOLD_BACK_OFF On -set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto -set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off -set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto -set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On -set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" -set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" -set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off -set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On -set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off -set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off -set_global_assignment -name PR_DONE_OPEN_DRAIN On -set_global_assignment -name NCEO_OPEN_DRAIN On -set_global_assignment -name ENABLE_CRC_ERROR_PIN Off -set_global_assignment -name ENABLE_PR_PINS Off -set_global_assignment -name RESERVE_PR_PINS Off -set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off -set_global_assignment -name PR_PINS_OPEN_DRAIN Off -set_global_assignment -name CLAMPING_DIODE Off -set_global_assignment -name TRI_STATE_SPI_PINS Off -set_global_assignment -name UNUSED_TSD_PINS_GND Off -set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off -set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off -set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" -set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 -set_global_assignment -name SEU_FIT_REPORT Off -set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On -set_global_assignment -name EDA_SIMULATION_TOOL "" -set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" -set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" -set_global_assignment -name EDA_RESYNTHESIS_TOOL "" -set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On -set_global_assignment -name COMPRESSION_MODE Off -set_global_assignment -name CLOCK_SOURCE Internal -set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" -set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 -set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF -set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name USE_CHECKSUM_AS_USERCODE On -set_global_assignment -name SECURITY_BIT Off -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" -set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto -set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" -set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 -set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 -set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto -set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto -set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto -set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off -set_global_assignment -name GENERATE_TTF_FILE Off -set_global_assignment -name GENERATE_RBF_FILE Off -set_global_assignment -name GENERATE_HEX_FILE Off -set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 -set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off -set_global_assignment -name AUTO_RESTART_CONFIGURATION On -set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off -set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off -set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" -set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" -set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF -set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off -set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off -set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off -set_global_assignment -name POR_SCHEME "Instant ON" -set_global_assignment -name EN_USER_IO_WEAK_PULLUP On -set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On -set_global_assignment -name POF_VERIFY_PROTECT Off -set_global_assignment -name ENABLE_SPI_MODE_CHECK Off -set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On -set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off -set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 -set_global_assignment -name GENERATE_PMSF_FILES On -set_global_assignment -name START_TIME 0ns -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off -set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On -set_global_assignment -name SETUP_HOLD_DETECTION Off -set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -set_global_assignment -name CHECK_OUTPUTS Off -set_global_assignment -name SIMULATION_COVERAGE On -set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name GLITCH_DETECTION Off -set_global_assignment -name GLITCH_INTERVAL 1ns -set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off -set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On -set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off -set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On -set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE -set_global_assignment -name SIMULATION_NETLIST_VIEWER Off -set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off -set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO -set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO -set_global_assignment -name DRC_TOP_FANOUT 50 -set_global_assignment -name DRC_FANOUT_EXCEEDING 30 -set_global_assignment -name DRC_GATED_CLOCK_FEED 30 -set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY -set_global_assignment -name ENABLE_DRC_SETTINGS Off -set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 -set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 -set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 -set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 -set_global_assignment -name MERGE_HEX_FILE Off -set_global_assignment -name GENERATE_SVF_FILE Off -set_global_assignment -name GENERATE_ISC_FILE Off -set_global_assignment -name GENERATE_JAM_FILE Off -set_global_assignment -name GENERATE_JBC_FILE Off -set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off -set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off -set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" -set_global_assignment -name HPS_EARLY_IO_RELEASE Off -set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off -set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off -set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_USE_PVA On -set_global_assignment -name POWER_USE_INPUT_FILE "No File" -set_global_assignment -name POWER_USE_INPUT_FILES Off -set_global_assignment -name POWER_VCD_FILTER_GLITCHES On -set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off -set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off -set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -set_global_assignment -name POWER_AUTO_COMPUTE_TJ On -set_global_assignment -name POWER_TJ_VALUE 25 -set_global_assignment -name POWER_USE_TA_VALUE 25 -set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off -set_global_assignment -name POWER_BOARD_TEMPERATURE 25 -set_global_assignment -name POWER_HPS_ENABLE Off -set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 -set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off -set_global_assignment -name IGNORE_PARTITIONS Off -set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off -set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On -set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" -set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On -set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On -set_global_assignment -name RTLV_GROUP_RELATED_NODES On -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off -set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On -set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On -set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On -set_global_assignment -name EQC_BBOX_MERGE On -set_global_assignment -name EQC_LVDS_MERGE On -set_global_assignment -name EQC_RAM_UNMERGING On -set_global_assignment -name EQC_DFF_SS_EMULATION On -set_global_assignment -name EQC_RAM_REGISTER_UNPACK On -set_global_assignment -name EQC_MAC_REGISTER_UNPACK On -set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On -set_global_assignment -name EQC_STRUCTURE_MATCHING On -set_global_assignment -name EQC_AUTO_BREAK_CONE On -set_global_assignment -name EQC_POWER_UP_COMPARE Off -set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On -set_global_assignment -name EQC_AUTO_INVERSION On -set_global_assignment -name EQC_AUTO_TERMINATE On -set_global_assignment -name EQC_SUB_CONE_REPORT Off -set_global_assignment -name EQC_RENAMING_RULES On -set_global_assignment -name EQC_PARAMETER_CHECK On -set_global_assignment -name EQC_AUTO_PORTSWAP On -set_global_assignment -name EQC_DETECT_DONT_CARES On -set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? -set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? -set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? -set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? -set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? -set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? -set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? -set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? -set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? -set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? -set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? -set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? -set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? -set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? -set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? -set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? -set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? -set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? -set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? -set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? -set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? -set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? -set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? -set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? -set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? -set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? -set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? -set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? -set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? -set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? -set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? -set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? -set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? -set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? -set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? -set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? -set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? -set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/sharpmz-lite-pll.sdc b/sharpmz-lite-pll.sdc deleted file mode 100644 index 127326e..0000000 --- a/sharpmz-lite-pll.sdc +++ /dev/null @@ -1,459 +0,0 @@ -## Generated SDC file "sharpmz-lite-pll.out.sdc" - -## Copyright (C) 2017 Intel Corporation. All rights reserved. -## Your use of Intel Corporation's design tools, logic functions -## and other software and tools, and its AMPP partner logic -## functions, and any output files from any of the foregoing -## (including device programming or simulation files), and any -## associated documentation or information are expressly subject -## to the terms and conditions of the Intel Program License -## Subscription Agreement, the Intel Quartus Prime License Agreement, -## the Intel MegaCore Function License Agreement, or other -## applicable license agreement, including, without limitation, -## that your use is for the sole purpose of programming logic -## devices manufactured by Intel and sold by Intel or its -## authorized distributors. Please refer to the applicable -## agreement for further details. - - -## VENDOR "Altera" -## PROGRAM "Quartus Prime" -## VERSION "Version 17.0.2 Build 602 07/19/2017 SJ Lite Edition" - -## DATE "Tue Oct 09 16:54:46 2018" - -## -## DEVICE "5CSEBA6U23I7" -## - - -#************************************************************** -# Time Information -#************************************************************** - -set_time_format -unit ns -decimal_places 3 - - - -#************************************************************** -# Create Clock -#************************************************************** - -create_clock -name {FPGA_CLK1_50} -period 20.000 -waveform { 0.000 10.000 } [get_ports {FPGA_CLK1_50}] -create_clock -name {FPGA_CLK2_50} -period 20.000 -waveform { 0.000 10.000 } [get_ports {FPGA_CLK2_50}] -create_clock -name {FPGA_CLK3_50} -period 20.000 -waveform { 0.000 10.000 } [get_ports {FPGA_CLK3_50}] -create_clock -name {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk} -period 10.000 -waveform { 0.000 5.000 } [get_pins -compatibility_mode {*|h2f_user0_clk}] - - -#************************************************************** -# Create Generated Clock -#************************************************************** - -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] -duty_cycle 50/1 -multiply_by 5243 -divide_by 512 -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 2 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 16 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 64 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 256 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 4 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 32 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 128 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 8 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] -duty_cycle 50/1 -multiply_by 1135 -divide_by 256 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 5 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 64 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 32 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 160 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 80 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 40 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 20 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 10 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] - - -#************************************************************** -# Set Clock Latency -#************************************************************** - - - -#************************************************************** -# Set Clock Uncertainty -#************************************************************** - -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {FPGA_CLK3_50}] -setup 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {FPGA_CLK3_50}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {FPGA_CLK3_50}] -setup 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {FPGA_CLK3_50}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {FPGA_CLK3_50}] -setup 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {FPGA_CLK3_50}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {FPGA_CLK3_50}] -setup 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {FPGA_CLK3_50}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK3_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.060 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.060 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {FPGA_CLK2_50}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {FPGA_CLK2_50}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.170 -set_clock_uncertainty -rise_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.170 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.060 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.060 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {FPGA_CLK2_50}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {FPGA_CLK2_50}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.170 -set_clock_uncertainty -fall_from [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK2_50}] -setup 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK2_50}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK2_50}] -setup 0.170 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK2_50}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.230 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.220 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.230 -set_clock_uncertainty -rise_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.220 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.110 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK2_50}] -setup 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {FPGA_CLK2_50}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK2_50}] -setup 0.170 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {FPGA_CLK2_50}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.230 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.220 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.230 -set_clock_uncertainty -fall_from [get_clocks {FPGA_CLK2_50}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.220 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[6].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.180 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.110 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.220 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {FPGA_CLK3_50}] 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {sysmem|fpga_interfaces|clocks_resets|h2f_user0_clk}] 0.220 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.330 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.280 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[7].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[5].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.260 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.170 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -rise_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -rise_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -setup 0.200 -set_clock_uncertainty -fall_from [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN2|pll_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk}] -fall_to [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN1|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -hold 0.060 - - -#************************************************************** -# Set Input Delay -#************************************************************** - - - -#************************************************************** -# Set Output Delay -#************************************************************** - - - -#************************************************************** -# Set Clock Groups -#************************************************************** - - - -#************************************************************** -# Set False Path -#************************************************************** - -set_false_path -from [get_ports {KEY*}] -set_false_path -from [get_ports {BTN_*}] -set_false_path -to [get_ports {LED_*}] -set_false_path -to [get_ports {VGA_*}] -set_false_path -to [get_ports {AUDIO_SPDIF}] -set_false_path -to [get_ports {AUDIO_L}] -set_false_path -to [get_ports {AUDIO_R}] - - -#************************************************************** -# Set Multicycle Path -#************************************************************** - - - -#************************************************************** -# Set Maximum Delay -#************************************************************** - - - -#************************************************************** -# Set Minimum Delay -#************************************************************** - - - -#************************************************************** -# Set Input Transition -#************************************************************** - -# Decouple different clock groups (to simplify routing) -# -group [get_clocks { *|pll|pll_inst|altera_pll_i|general[*].gpll~PLL_OUTPUT_COUNTER|divclk}] \ -# -group [get_clocks { pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk VID_CLK}] \ -set_clock_groups -asynchronous \ - -group [get_clocks { *|h2f_user0_clk}] \ - -group [get_clocks { FPGA_CLK1_50 FPGA_CLK2_50 FPGA_CLK3_50}] - diff --git a/sharpmz-lite-pll_assignment_defaults.qdf b/sharpmz-lite-pll_assignment_defaults.qdf deleted file mode 100644 index d210acb..0000000 --- a/sharpmz-lite-pll_assignment_defaults.qdf +++ /dev/null @@ -1,807 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel FPGA IP License Agreement, or other applicable license -# agreement, including, without limitation, that your use is for -# the sole purpose of programming logic devices manufactured by -# Intel and sold by Intel or its authorized distributors. Please -# refer to the applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 17.1.1 Internal Build 593 12/11/2017 SJ Standard Edition -# Date created = 17:23:11 October 20, 2018 -# -# -------------------------------------------------------------------------- # -# -# Note: -# -# 1) Do not modify this file. This file was generated -# automatically by the Quartus Prime software and is used -# to preserve global assignments across Quartus Prime versions. -# -# -------------------------------------------------------------------------- # - -set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off -set_global_assignment -name IP_COMPONENT_INTERNAL Off -set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On -set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off -set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off -set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db -set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off -set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off -set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off -set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off -set_global_assignment -name HC_OUTPUT_DIR hc_output -set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off -set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On -set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off -set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" -set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On -set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On -set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off -set_global_assignment -name REVISION_TYPE Base -family "Arria V" -set_global_assignment -name REVISION_TYPE Base -family "Stratix V" -set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" -set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" -set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" -set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On -set_global_assignment -name DO_COMBINED_ANALYSIS Off -set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off -set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off -set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off -set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off -set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On -set_global_assignment -name TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "MAX 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone V" -set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" -set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "MAX 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone V" -set_global_assignment -name OPTIMIZATION_MODE Balanced -set_global_assignment -name ALLOW_REGISTER_MERGING On -set_global_assignment -name ALLOW_REGISTER_DUPLICATION On -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix IV" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Arria 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX II" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone V" -set_global_assignment -name MUX_RESTRUCTURE Auto -set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off -set_global_assignment -name ENABLE_IP_DEBUG Off -set_global_assignment -name SAVE_DISK_SPACE On -set_global_assignment -name OCP_HW_EVAL Enable -set_global_assignment -name DEVICE_FILTER_PACKAGE Any -set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any -set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" -set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 -set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name TRUE_WYSIWYG_FLOW Off -set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off -set_global_assignment -name STATE_MACHINE_PROCESSING Auto -set_global_assignment -name SAFE_STATE_MACHINE Off -set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On -set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On -set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off -set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 -set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 -set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On -set_global_assignment -name PARALLEL_SYNTHESIS On -set_global_assignment -name DSP_BLOCK_BALANCING Auto -set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" -set_global_assignment -name NOT_GATE_PUSH_BACK On -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On -set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off -set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On -set_global_assignment -name IGNORE_CARRY_BUFFERS Off -set_global_assignment -name IGNORE_CASCADE_BUFFERS Off -set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_LCELL_BUFFERS Off -set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO -set_global_assignment -name IGNORE_SOFT_BUFFERS On -set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off -set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off -set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On -set_global_assignment -name AUTO_GLOBAL_OE_MAX On -set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off -set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut -set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed -set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name ALLOW_XOR_GATE_USAGE On -set_global_assignment -name AUTO_LCELL_INSERTION On -set_global_assignment -name CARRY_CHAIN_LENGTH 48 -set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 -set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name CASCADE_CHAIN_LENGTH 2 -set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 -set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 -set_global_assignment -name AUTO_CARRY_CHAINS On -set_global_assignment -name AUTO_CASCADE_CHAINS On -set_global_assignment -name AUTO_PARALLEL_EXPANDERS On -set_global_assignment -name AUTO_OPEN_DRAIN_PINS On -set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off -set_global_assignment -name AUTO_ROM_RECOGNITION On -set_global_assignment -name AUTO_RAM_RECOGNITION On -set_global_assignment -name AUTO_DSP_RECOGNITION On -set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto -set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On -set_global_assignment -name STRICT_RAM_RECOGNITION Off -set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On -set_global_assignment -name FORCE_SYNCH_CLEAR Off -set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On -set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off -set_global_assignment -name AUTO_RESOURCE_SHARING Off -set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off -set_global_assignment -name MAX7000_FANIN_PER_CELL 100 -set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On -set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" -set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off -set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" -set_global_assignment -name REPORT_PARAMETER_SETTINGS On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On -set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On -set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" -set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" -set_global_assignment -name HDL_MESSAGE_LEVEL Level2 -set_global_assignment -name USE_HIGH_SPEED_ADDER Auto -set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 -set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 -set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 -set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off -set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 -set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 -set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On -set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off -set_global_assignment -name BLOCK_DESIGN_NAMING Auto -set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off -set_global_assignment -name SYNTHESIS_EFFORT Auto -set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On -set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off -set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium -set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" -set_global_assignment -name MAX_LABS "-1 (Unlimited)" -set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On -set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" -set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On -set_global_assignment -name PRPOF_ID Off -set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off -set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On -set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off -set_global_assignment -name AUTO_MERGE_PLLS On -set_global_assignment -name IGNORE_MODE_FOR_MERGE Off -set_global_assignment -name TXPMA_SLEW_RATE Low -set_global_assignment -name ADCE_ENABLED Auto -set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal -set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off -set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 -set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS Off -set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off -set_global_assignment -name DEVICE AUTO -set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off -set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On -set_global_assignment -name ENABLE_NCEO_OUTPUT Off -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name STRATIXIII_UPDATE_MODE Standard -set_global_assignment -name STRATIX_UPDATE_MODE Standard -set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" -set_global_assignment -name CVP_MODE Off -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" -set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" -set_global_assignment -name USE_CONF_DONE AUTO -set_global_assignment -name USE_PWRMGT_SCL AUTO -set_global_assignment -name USE_PWRMGT_SDA AUTO -set_global_assignment -name USE_PWRMGT_ALERT AUTO -set_global_assignment -name USE_INIT_DONE AUTO -set_global_assignment -name USE_CVP_CONFDONE AUTO -set_global_assignment -name USE_SEU_ERROR AUTO -set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name USER_START_UP_CLOCK Off -set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off -set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off -set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On -set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On -set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -set_global_assignment -name ENABLE_VREFA_PIN Off -set_global_assignment -name ENABLE_VREFB_PIN Off -set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off -set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off -set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off -set_global_assignment -name INIT_DONE_OPEN_DRAIN On -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name ENABLE_CONFIGURATION_PINS On -set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off -set_global_assignment -name ENABLE_NCE_PIN Off -set_global_assignment -name ENABLE_BOOT_SEL_PIN On -set_global_assignment -name CRC_ERROR_CHECKING Off -set_global_assignment -name INTERNAL_SCRUBBING Off -set_global_assignment -name PR_ERROR_OPEN_DRAIN On -set_global_assignment -name PR_READY_OPEN_DRAIN On -set_global_assignment -name ENABLE_CVP_CONFDONE Off -set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On -set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" -set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" -set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 -set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" -set_global_assignment -name OPTIMIZE_SSN Off -set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" -set_global_assignment -name ECO_OPTIMIZE_TIMING Off -set_global_assignment -name ECO_REGENERATE_REPORT Off -set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal -set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically -set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically -set_global_assignment -name SEED 1 -set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF -set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off -set_global_assignment -name SLOW_SLEW_RATE Off -set_global_assignment -name PCI_IO Off -set_global_assignment -name TURBO_BIT On -set_global_assignment -name WEAK_PULL_UP_RESISTOR Off -set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off -set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off -set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On -set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto -set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto -set_global_assignment -name NORMAL_LCELL_INSERT On -set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" -set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF -set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off -set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off -set_global_assignment -name AUTO_TURBO_BIT ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off -set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off -set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On -set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off -set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off -set_global_assignment -name FITTER_EFFORT "Auto Fit" -set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal -set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto -set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto -set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off -set_global_assignment -name AUTO_GLOBAL_CLOCK On -set_global_assignment -name AUTO_GLOBAL_OE On -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic -set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off -set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" -set_global_assignment -name ENABLE_HOLD_BACK_OFF On -set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto -set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off -set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto -set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On -set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" -set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" -set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off -set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On -set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off -set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off -set_global_assignment -name PR_DONE_OPEN_DRAIN On -set_global_assignment -name NCEO_OPEN_DRAIN On -set_global_assignment -name ENABLE_CRC_ERROR_PIN Off -set_global_assignment -name ENABLE_PR_PINS Off -set_global_assignment -name RESERVE_PR_PINS Off -set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off -set_global_assignment -name PR_PINS_OPEN_DRAIN Off -set_global_assignment -name CLAMPING_DIODE Off -set_global_assignment -name TRI_STATE_SPI_PINS Off -set_global_assignment -name UNUSED_TSD_PINS_GND Off -set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off -set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off -set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" -set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 -set_global_assignment -name SEU_FIT_REPORT Off -set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On -set_global_assignment -name EDA_SIMULATION_TOOL "" -set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" -set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" -set_global_assignment -name EDA_RESYNTHESIS_TOOL "" -set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On -set_global_assignment -name COMPRESSION_MODE Off -set_global_assignment -name CLOCK_SOURCE Internal -set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" -set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 -set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF -set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name USE_CHECKSUM_AS_USERCODE On -set_global_assignment -name SECURITY_BIT Off -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" -set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto -set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" -set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 -set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 -set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto -set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto -set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto -set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off -set_global_assignment -name GENERATE_TTF_FILE Off -set_global_assignment -name GENERATE_RBF_FILE Off -set_global_assignment -name GENERATE_HEX_FILE Off -set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 -set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off -set_global_assignment -name AUTO_RESTART_CONFIGURATION On -set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off -set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off -set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" -set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" -set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF -set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off -set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off -set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off -set_global_assignment -name POR_SCHEME "Instant ON" -set_global_assignment -name EN_USER_IO_WEAK_PULLUP On -set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On -set_global_assignment -name POF_VERIFY_PROTECT Off -set_global_assignment -name ENABLE_SPI_MODE_CHECK Off -set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On -set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off -set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 -set_global_assignment -name GENERATE_PMSF_FILES On -set_global_assignment -name START_TIME 0ns -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off -set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On -set_global_assignment -name SETUP_HOLD_DETECTION Off -set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -set_global_assignment -name CHECK_OUTPUTS Off -set_global_assignment -name SIMULATION_COVERAGE On -set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name GLITCH_DETECTION Off -set_global_assignment -name GLITCH_INTERVAL 1ns -set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off -set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On -set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off -set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On -set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE -set_global_assignment -name SIMULATION_NETLIST_VIEWER Off -set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off -set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO -set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO -set_global_assignment -name DRC_TOP_FANOUT 50 -set_global_assignment -name DRC_FANOUT_EXCEEDING 30 -set_global_assignment -name DRC_GATED_CLOCK_FEED 30 -set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY -set_global_assignment -name ENABLE_DRC_SETTINGS Off -set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 -set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 -set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 -set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 -set_global_assignment -name MERGE_HEX_FILE Off -set_global_assignment -name GENERATE_SVF_FILE Off -set_global_assignment -name GENERATE_ISC_FILE Off -set_global_assignment -name GENERATE_JAM_FILE Off -set_global_assignment -name GENERATE_JBC_FILE Off -set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off -set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off -set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" -set_global_assignment -name HPS_EARLY_IO_RELEASE Off -set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off -set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off -set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_USE_PVA On -set_global_assignment -name POWER_USE_INPUT_FILE "No File" -set_global_assignment -name POWER_USE_INPUT_FILES Off -set_global_assignment -name POWER_VCD_FILTER_GLITCHES On -set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off -set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off -set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -set_global_assignment -name POWER_AUTO_COMPUTE_TJ On -set_global_assignment -name POWER_TJ_VALUE 25 -set_global_assignment -name POWER_USE_TA_VALUE 25 -set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off -set_global_assignment -name POWER_BOARD_TEMPERATURE 25 -set_global_assignment -name POWER_HPS_ENABLE Off -set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 -set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off -set_global_assignment -name IGNORE_PARTITIONS Off -set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off -set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On -set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" -set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On -set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On -set_global_assignment -name RTLV_GROUP_RELATED_NODES On -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off -set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On -set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On -set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On -set_global_assignment -name EQC_BBOX_MERGE On -set_global_assignment -name EQC_LVDS_MERGE On -set_global_assignment -name EQC_RAM_UNMERGING On -set_global_assignment -name EQC_DFF_SS_EMULATION On -set_global_assignment -name EQC_RAM_REGISTER_UNPACK On -set_global_assignment -name EQC_MAC_REGISTER_UNPACK On -set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On -set_global_assignment -name EQC_STRUCTURE_MATCHING On -set_global_assignment -name EQC_AUTO_BREAK_CONE On -set_global_assignment -name EQC_POWER_UP_COMPARE Off -set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On -set_global_assignment -name EQC_AUTO_INVERSION On -set_global_assignment -name EQC_AUTO_TERMINATE On -set_global_assignment -name EQC_SUB_CONE_REPORT Off -set_global_assignment -name EQC_RENAMING_RULES On -set_global_assignment -name EQC_PARAMETER_CHECK On -set_global_assignment -name EQC_AUTO_PORTSWAP On -set_global_assignment -name EQC_DETECT_DONT_CARES On -set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? -set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? -set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? -set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? -set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? -set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? -set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? -set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? -set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? -set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? -set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? -set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? -set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? -set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? -set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? -set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? -set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? -set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? -set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? -set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? -set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? -set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? -set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? -set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? -set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? -set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? -set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? -set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? -set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? -set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? -set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? -set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? -set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? -set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? -set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? -set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? -set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? -set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/sharpmz-lite.qsf b/sharpmz-lite.qsf deleted file mode 100644 index 0c98c50..0000000 --- a/sharpmz-lite.qsf +++ /dev/null @@ -1,536 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel MegaCore Function License Agreement, or other -# applicable license agreement, including, without limitation, -# that your use is for the sole purpose of programming logic -# devices manufactured by Intel and sold by Intel or its -# authorized distributors. Please refer to the applicable -# agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 16.1.2 Build 203 01/18/2017 SJ Standard Edition -# Date created = 01:53:32 April 20, 2017 -# -# -------------------------------------------------------------------------- # - -set_global_assignment -name VERILOG_MACRO "LITE=1" - -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name DEVICE 5CSEBA6U23I7 -set_global_assignment -name TOP_LEVEL_ENTITY sys_top -#set_global_assignment -name TOP_LEVEL_ENTITY emu -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 -set_global_assignment -name LAST_QUARTUS_VERSION "17.1.1 Standard Edition" -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 - -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name SMART_RECOMPILE OFF -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40" -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 -set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" -set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -set_global_assignment -name OPTIMIZATION_MODE "HIGH POWER EFFORT" -set_global_assignment -name SEED 1 -#set_global_assignment -name SDC_FILE sharpmz.sdc -set_global_assignment -name SDC_FILE "sharpmz-lite.sdc" - -#============================================================ -# ADC -#============================================================ -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CONVST -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCK -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDI -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDO -#set_location_assignment PIN_U9 -to ADC_CONVST -#set_location_assignment PIN_V10 -to ADC_SCK -#set_location_assignment PIN_AC4 -to ADC_SDI -#set_location_assignment PIN_AD4 -to ADC_SDO - -#============================================================ -# ARDUINO -#============================================================ -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[3] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[4] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[5] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[6] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[7] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[8] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[9] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[10] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[11] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[12] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[13] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[14] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[15] -#set_location_assignment PIN_AG9 -to ARDUINO_IO[3] -#set_location_assignment PIN_U14 -to ARDUINO_IO[4] -#set_location_assignment PIN_U13 -to ARDUINO_IO[5] -#set_location_assignment PIN_AG8 -to ARDUINO_IO[6] -#set_location_assignment PIN_AH8 -to ARDUINO_IO[7] -#set_location_assignment PIN_AF17 -to ARDUINO_IO[8] -#set_location_assignment PIN_AE15 -to ARDUINO_IO[9] -#set_location_assignment PIN_AF15 -to ARDUINO_IO[10] -#set_location_assignment PIN_AG16 -to ARDUINO_IO[11] -#set_location_assignment PIN_AH11 -to ARDUINO_IO[12] -#set_location_assignment PIN_AH12 -to ARDUINO_IO[13] -#set_location_assignment PIN_AH9 -to ARDUINO_IO[14] -#set_location_assignment PIN_AG11 -to ARDUINO_IO[15] - -#============================================================ -# SDIO -#============================================================ -set_location_assignment PIN_AF25 -to SDIO_DAT[0] -set_location_assignment PIN_AF23 -to SDIO_DAT[1] -set_location_assignment PIN_AD26 -to SDIO_DAT[2] -set_location_assignment PIN_AF28 -to SDIO_DAT[3] -set_location_assignment PIN_AF27 -to SDIO_CMD -set_location_assignment PIN_AH26 -to SDIO_CLK -set_location_assignment PIN_AH7 -to SDIO_CD -# -set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* -# -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CD - -#============================================================ -# VGA -#============================================================ -set_location_assignment PIN_AE17 -to VGA_R[0] -set_location_assignment PIN_AE20 -to VGA_R[1] -set_location_assignment PIN_AF20 -to VGA_R[2] -set_location_assignment PIN_AH18 -to VGA_R[3] -set_location_assignment PIN_AH19 -to VGA_R[4] -set_location_assignment PIN_AF21 -to VGA_R[5] - -set_location_assignment PIN_AE19 -to VGA_G[0] -set_location_assignment PIN_AG15 -to VGA_G[1] -set_location_assignment PIN_AF18 -to VGA_G[2] -set_location_assignment PIN_AG18 -to VGA_G[3] -set_location_assignment PIN_AG19 -to VGA_G[4] -set_location_assignment PIN_AG20 -to VGA_G[5] - -set_location_assignment PIN_AG21 -to VGA_B[0] -set_location_assignment PIN_AA20 -to VGA_B[1] -set_location_assignment PIN_AE22 -to VGA_B[2] -set_location_assignment PIN_AF22 -to VGA_B[3] -set_location_assignment PIN_AH23 -to VGA_B[4] -set_location_assignment PIN_AH21 -to VGA_B[5] - -set_location_assignment PIN_AH22 -to VGA_HS -set_location_assignment PIN_AG24 -to VGA_VS - -set_location_assignment PIN_AH27 -to VGA_EN -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* - -#============================================================ -# AUDIO -#============================================================ -set_location_assignment PIN_AC24 -to AUDIO_L -set_location_assignment PIN_AE25 -to AUDIO_R -set_location_assignment PIN_AG26 -to AUDIO_SPDIF -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* - -#============================================================ -# SDRAM -#============================================================ -#set_location_assignment PIN_Y11 -to SDRAM_A[0] -#set_location_assignment PIN_AA26 -to SDRAM_A[1] -#set_location_assignment PIN_AA13 -to SDRAM_A[2] -#set_location_assignment PIN_AA11 -to SDRAM_A[3] -#set_location_assignment PIN_W11 -to SDRAM_A[4] -#set_location_assignment PIN_Y19 -to SDRAM_A[5] -#set_location_assignment PIN_AB23 -to SDRAM_A[6] -#set_location_assignment PIN_AC23 -to SDRAM_A[7] -#set_location_assignment PIN_AC22 -to SDRAM_A[8] -#set_location_assignment PIN_C12 -to SDRAM_A[9] -#set_location_assignment PIN_AB26 -to SDRAM_A[10] -#set_location_assignment PIN_AD17 -to SDRAM_A[11] -#set_location_assignment PIN_D12 -to SDRAM_A[12] -#set_location_assignment PIN_Y17 -to SDRAM_BA[0] -#set_location_assignment PIN_AB25 -to SDRAM_BA[1] - -#set_location_assignment PIN_E8 -to SDRAM_DQ[0] -#set_location_assignment PIN_V12 -to SDRAM_DQ[1] -#set_location_assignment PIN_D11 -to SDRAM_DQ[2] -#set_location_assignment PIN_W12 -to SDRAM_DQ[3] -#set_location_assignment PIN_AH13 -to SDRAM_DQ[4] -#set_location_assignment PIN_D8 -to SDRAM_DQ[5] -#set_location_assignment PIN_AH14 -to SDRAM_DQ[6] -#set_location_assignment PIN_AF7 -to SDRAM_DQ[7] -#set_location_assignment PIN_AE24 -to SDRAM_DQ[8] -#set_location_assignment PIN_AD23 -to SDRAM_DQ[9] -#set_location_assignment PIN_AE6 -to SDRAM_DQ[10] -#set_location_assignment PIN_AE23 -to SDRAM_DQ[11] -#set_location_assignment PIN_AG14 -to SDRAM_DQ[12] -#set_location_assignment PIN_AD5 -to SDRAM_DQ[13] -#set_location_assignment PIN_AF4 -to SDRAM_DQ[14] -#set_location_assignment PIN_AH3 -to SDRAM_DQ[15] -#set_location_assignment PIN_AG13 -to SDRAM_DQML -#set_location_assignment PIN_AF13 -to SDRAM_DQMH - -#set_location_assignment PIN_AD20 -to SDRAM_CLK -#set_location_assignment PIN_AG10 -to SDRAM_CKE - -#set_location_assignment PIN_AA19 -to SDRAM_nWE -#set_location_assignment PIN_AA18 -to SDRAM_nCAS -#set_location_assignment PIN_Y18 -to SDRAM_nCS -#set_location_assignment PIN_W14 -to SDRAM_nRAS - -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_* -#set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_* -#set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A* -#set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA* -#set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*] -#set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQM* -#set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_n* -#set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] -#set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* - -#============================================================ -# I/O -#============================================================ -set_location_assignment PIN_Y15 -to LED_USER -set_location_assignment PIN_AA15 -to LED_HDD -set_location_assignment PIN_AG28 -to LED_POWER - -set_location_assignment PIN_AH24 -to BTN_USER -set_location_assignment PIN_AG25 -to BTN_OSD -set_location_assignment PIN_AG23 -to BTN_RESET - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* - -#============================================================ -# CLOCK -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK1_50 -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK2_50 -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK3_50 -set_location_assignment PIN_V11 -to FPGA_CLK1_50 -set_location_assignment PIN_Y13 -to FPGA_CLK2_50 -set_location_assignment PIN_E11 -to FPGA_CLK3_50 - -#============================================================ -# HDMI -#============================================================ -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SCL -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SDA -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2S -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_LRCLK -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_MCLK -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_SCLK -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_CLK -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_DE -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[0] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[1] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[2] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[3] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[4] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[5] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[6] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[7] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[8] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[9] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[10] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[11] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[12] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[13] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[14] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[15] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[16] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[17] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[18] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[19] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[20] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[21] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[22] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[23] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_HS -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_INT -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_VS -#set_location_assignment PIN_U10 -to HDMI_I2C_SCL -#set_location_assignment PIN_AA4 -to HDMI_I2C_SDA -#set_location_assignment PIN_T13 -to HDMI_I2S -#set_location_assignment PIN_T11 -to HDMI_LRCLK -#set_location_assignment PIN_U11 -to HDMI_MCLK -#set_location_assignment PIN_T12 -to HDMI_SCLK -#set_location_assignment PIN_AG5 -to HDMI_TX_CLK -#set_location_assignment PIN_AD19 -to HDMI_TX_DE -#set_location_assignment PIN_AD12 -to HDMI_TX_D[0] -#set_location_assignment PIN_AE12 -to HDMI_TX_D[1] -#set_location_assignment PIN_W8 -to HDMI_TX_D[2] -#set_location_assignment PIN_Y8 -to HDMI_TX_D[3] -#set_location_assignment PIN_AD11 -to HDMI_TX_D[4] -#set_location_assignment PIN_AD10 -to HDMI_TX_D[5] -#set_location_assignment PIN_AE11 -to HDMI_TX_D[6] -#set_location_assignment PIN_Y5 -to HDMI_TX_D[7] -#set_location_assignment PIN_AF10 -to HDMI_TX_D[8] -#set_location_assignment PIN_Y4 -to HDMI_TX_D[9] -#set_location_assignment PIN_AE9 -to HDMI_TX_D[10] -#set_location_assignment PIN_AB4 -to HDMI_TX_D[11] -#set_location_assignment PIN_AE7 -to HDMI_TX_D[12] -#set_location_assignment PIN_AF6 -to HDMI_TX_D[13] -#set_location_assignment PIN_AF8 -to HDMI_TX_D[14] -#set_location_assignment PIN_AF5 -to HDMI_TX_D[15] -#set_location_assignment PIN_AE4 -to HDMI_TX_D[16] -#set_location_assignment PIN_AH2 -to HDMI_TX_D[17] -#set_location_assignment PIN_AH4 -to HDMI_TX_D[18] -#set_location_assignment PIN_AH5 -to HDMI_TX_D[19] -#set_location_assignment PIN_AH6 -to HDMI_TX_D[20] -#set_location_assignment PIN_AG6 -to HDMI_TX_D[21] -#set_location_assignment PIN_AF9 -to HDMI_TX_D[22] -#set_location_assignment PIN_AE8 -to HDMI_TX_D[23] -#set_location_assignment PIN_T8 -to HDMI_TX_HS -#set_location_assignment PIN_AF11 -to HDMI_TX_INT -#set_location_assignment PIN_V13 -to HDMI_TX_VS - -#============================================================ -# KEY -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1] -set_location_assignment PIN_AH17 -to KEY[0] -set_location_assignment PIN_AH16 -to KEY[1] - -#============================================================ -# LED -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[1] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[2] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[7] -set_location_assignment PIN_W15 -to LED[0] -set_location_assignment PIN_AA24 -to LED[1] -set_location_assignment PIN_V16 -to LED[2] -set_location_assignment PIN_V15 -to LED[3] -set_location_assignment PIN_AF26 -to LED[4] -set_location_assignment PIN_AE26 -to LED[5] -set_location_assignment PIN_Y16 -to LED[6] -set_location_assignment PIN_AA23 -to LED[7] - -#============================================================ -# SW -#============================================================ -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3] -#set_location_assignment PIN_Y24 -to SW[0] -#set_location_assignment PIN_W24 -to SW[1] -#set_location_assignment PIN_W21 -to SW[2] -#set_location_assignment PIN_W20 -to SW[3] - -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" - -set_global_assignment -name CDF_FILE jtag.cdf -set_global_assignment -name QIP_FILE sys/sys.qip -set_global_assignment -name VHDL_FILE jtag_uart_0.vhd -set_global_assignment -name SYSTEMVERILOG_FILE emu.sv -set_global_assignment -name VHDL_FILE common/config_pkg.vhd -set_global_assignment -name VHDL_FILE bridge.vhd -set_global_assignment -name VHDL_FILE sharpmz.vhd - -#============================================================ -# Latest T80 CPU -#============================================================ -set_global_assignment -name VHDL_FILE common/T80/T80.vhd -set_global_assignment -name VHDL_FILE common/T80/T8080se.vhd -set_global_assignment -name VHDL_FILE common/T80/T80_ALU.vhd -set_global_assignment -name VHDL_FILE common/T80/T80_MCode.vhd -set_global_assignment -name VHDL_FILE common/T80/T80_Pack.vhd -set_global_assignment -name VHDL_FILE common/T80/T80_Reg.vhd -set_global_assignment -name VHDL_FILE common/T80/T80a.vhd -set_global_assignment -name VHDL_FILE common/T80/T80se.vhd -set_global_assignment -name VHDL_FILE common/T80/T80sed.vhd - -#============================================================ -# i8253 Programmable Interval Timer -#============================================================ -set_global_assignment -name VHDL_FILE common/i8254/i8254_counter.vhd -set_global_assignment -name VHDL_FILE common/i8254/i8254.vhd - -#============================================================ -# i8255 Programmable Peripheral Interface -#============================================================ -set_global_assignment -name VHDL_FILE common/i8255/i8255.vhd -#set_global_assignment -name VHDL_FILE mz80b/i8255/i8255.vhd - -#============================================================ -# MZ80C specific modules. -#============================================================ -set_global_assignment -name VHDL_FILE mz80c/mz80c.vhd - -#============================================================ -# MZ80B specific modules. -#============================================================ -#set_global_assignment -name VHDL_FILE mz80b/mz80b_dummy.vhd -set_global_assignment -name VHDL_FILE mz80b/mz80b.vhd - -#============================================================ -# NEO430 -#============================================================ -#set_global_assignment -name VHDL_FILE neo430/neo430.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_addr_gen.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_alu.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_application_image.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_boot_rom.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_bootloader_image.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_cfu.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_control.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_cpu.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_crc.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_dmem.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_gpio.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_imem.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_muldiv.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_package.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_pwm.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_reg_file.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_sysconfig.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_timer.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_top.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_uart.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_spi.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_twi.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_wb_interface.vhd -#set_global_assignment -name VHDL_FILE neo430/neo430_wdt.vhd -#============================================================ -# STORM -#============================================================ -#set_global_assignment -name VHDL_FILE storm/STORM_SoC.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/ALU.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/BARREL_SHIFTER.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/BUS_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/CACHE.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/CORE.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/CORE_PKG.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/FLOW_CTRL.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/LOAD_STORE_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/MC_SYS.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/MS_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/MULTIPLY_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/OPCODE_DECODER.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/OPERAND_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/REG_FILE.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/STORM_TOP.vhd -#set_global_assignment -name VHDL_FILE storm/CPU/WB_UNIT.vhd -#set_global_assignment -name VHDL_FILE storm/components/boot_rom/rtl/BOOT_ROM_FILE.vhd -#set_global_assignment -name VHDL_FILE storm/components/seven_segment_controller/rtl/SEVEN_SEG_CTRL.vhd -#set_global_assignment -name VHDL_FILE storm/components/ps2core/rtl/vhdl/ps2_wb.vhd -#set_global_assignment -name VHDL_FILE storm/components/ps2core/rtl/vhdl/ps2.vhd -#set_global_assignment -name VHDL_FILE storm/components/reset_protector/rtl/RST_PROTECT.vhd -#set_global_assignment -name VHDL_FILE storm/components/timer/rtl/TIMER.vhd -#set_global_assignment -name VHDL_FILE storm/components/io_controller/rtl/GP_IO_CTRL.vhd -#set_global_assignment -name VHDL_FILE storm/components/vector_interrupt_controller/rtl/VIC.vhd -#set_global_assignment -name VHDL_FILE storm/components/miniuart/rtl/vhdl/MINI_UART.vhd -#set_global_assignment -name VHDL_FILE storm/components/miniuart/rtl/vhdl/Txunit.vhd -#set_global_assignment -name VHDL_FILE storm/components/miniuart/rtl/vhdl/Rxunit.vhd -#set_global_assignment -name VHDL_FILE storm/components/miniuart/rtl/vhdl/utils.vhd -#set_global_assignment -name VHDL_FILE storm/components/i2c_controller/rtl/vhdl/i2c_master_top.vhd -#set_global_assignment -name VHDL_FILE storm/components/i2c_controller/rtl/vhdl/i2c_master_byte_ctrl.vhd -#set_global_assignment -name VHDL_FILE storm/components/i2c_controller/rtl/vhdl/i2c_master_bit_ctrl.vhd -#set_global_assignment -name VHDL_FILE storm/components/pwm_controller/rtl/PWM_CTRL.vhd -#set_global_assignment -name VHDL_FILE storm/components/sram_memory/rtl/MEMORY.vhd -#set_global_assignment -name VHDL_FILE storm/components/ioctl/rtl/ioctl.vhd -#set_global_assignment -name VERILOG_FILE storm/components/spi_controller/rtl/verilog/spi_top.v -#set_global_assignment -name VERILOG_FILE storm/components/spi_controller/rtl/verilog/spi_defines.v -#set_global_assignment -name VERILOG_FILE storm/components/spi_controller/rtl/verilog/spi_clgen.v -#set_global_assignment -name VERILOG_FILE storm/components/spi_controller/rtl/verilog/spi_shift.v -#set_global_assignment -name VERILOG_FILE storm/components/spi_controller/rtl/verilog/timescale.v - -#============================================================ -# PLL -#============================================================ -set_global_assignment -name QIP_FILE common/pll.qip -set_global_assignment -name VHDL_FILE common/clkgen.vhd -#set_global_assignment -name QIP_FILE common/pll_1.qip -#set_global_assignment -name QIP_FILE common/pll_2.qip -#set_global_assignment -name QIP_FILE common/pll_4.qip - -#============================================================ -# Common modules -#============================================================ -set_global_assignment -name VHDL_FILE common/dprom.vhd -set_global_assignment -name VHDL_FILE common/clk_div.vhd -set_global_assignment -name VHDL_FILE common/mctrl.vhd -set_global_assignment -name VHDL_FILE common/dpram.vhd -set_global_assignment -name VHDL_FILE common/keymatrix.vhd -set_global_assignment -name VHDL_FILE common/video.vhd -set_global_assignment -name VHDL_FILE common/cmt.vhd -set_global_assignment -name VHDL_FILE common/z8420/z8420.vhd -set_global_assignment -name VHDL_FILE common/z8420/Interrupt.vhd - -#============================================================ -# Functions -#============================================================ -set_global_assignment -name VHDL_FILE common/functions.vhd - -set_global_assignment -name FLOW_ENABLE_RTL_VIEWER ON -set_global_assignment -name ALLOW_REGISTER_RETIMING ON - - -set_location_assignment PIN_AA13 -to UART_TX -set_location_assignment PIN_AA11 -to UART_RX -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_TX -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_RX -set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to UART_TX -# -#set_location_assignment PIN_AF25 -to SPI_MISO -#set_location_assignment PIN_AF28 -to SPI_CS[0] -#set_location_assignment PIN_AF27 -to SPI_MOSI -#set_location_assignment PIN_AH26 -to SPI_SCLK - -#set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SPI_MISO -#set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SPI_CS[0] -#set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SPI_MOSI -#set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SPI_SCLK - -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_MISO -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_CS[0] -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_MOSI -#set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SCLK -#set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SPI_MISO - - - - - - - - - -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top diff --git a/sharpmz-lite.qws b/sharpmz-lite.qws deleted file mode 100644 index 185237e1a317673b0be2ac76efda6c79fb92ee41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmbV}Jx;?w5QX0wij*9Hf&w86$tVdyqC^x_REQpo?LcI}CKyp5uE9091`-Vw5oaO% zd^2)rKu9pFH*aP=JM(tE6>DaTI#sGmH9F9>Dvec=)$C;|+M)pO>PERXGyulAhDx+f z-lr~6kClUjlU;3k)FtYJl-ePF!0Pes_5-ut;U4GFn`O3zJ%GtH!iQH}jHViG7bt8{ zn8CSo>6%Am$7pC~=O-LGl#d8^)(gzH=)j$6n?SNLE8MO?VWTB&>k76x=VbeE#S0yw zer%=I)&*OPEog_M1rn?zQ~6Vo2{Xjn(+I66|C!|PL6c<{RsSxPx^GhF*fJHX+_7r! dc=q=;YvJYT@#|mN97QSa*+U!;^lq>`(kJ|^Ydin| diff --git a/sharpmz-lite.rbf b/sharpmz-lite.rbf deleted file mode 100644 index 7f3691a6852d69d64d58671c5a1391e31f5a730d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2966124 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 z%0AiT=>aV@XJ2ek{2Neo;Of4*ZW)#{>A0+^QWCC%{;R&?PT4bK56Q&^VX#?$nKyi~ z!Lv8!4D120a|Y&%4eU;^eSDdB&=noTP8$}pLH4|{f;$vIeT7T2ACb+89d*MUCW zbOE9ywvMI6e9&MhXmG)_%xIN2XmBB?T;gE0ShiCkMjcWDuzuj%-c#zpH^0IbM8CVCNtZw)dIR*D~`<20q_3?xnK>u*1d{AiT8);?}?pn_^}<{Q{fBH>1U3bfu^SVANzM0?pK1Kt*d8&rb~_rX z=0K3CT$m6HEJ1&-8OLU0Pf?vd->}d2Di+?!SV%uQ0K$S|Sh4V{Bc{^wLlCO(R9yJ2 z*=l3P#RBbtq~GH+Hui0`y=k9s{Ipn)f8nbAej^4Rd$AudHC*})D4KcFFNb^ZE2?Ye znsjDtaQ#f1fHC_L1K+6_m~Xo2nq@v!U$*+It)H>=2Tgo9wGQhB1AEr;^!cVUFzpp{ z2G*_JX#FAF&?3y*Sl3erC-d{Ol%d67tUuh$PdnDF2cu}OI!%yp8LCX*9>_R`>PWbW}EkAJ6HoknO zRCH+hfy3?ak2ik)8;;)O^D*|2Y54)0#)p^y(Zv)c15lHv?#5fc0>p0zR$p-UVt@&l ziNKeY8WACs!h_V&In=7mjZ5sfd3N|Fea5k~IN$5(nDu8Ubee&GxzoQ~AJhuu&$VX{ z1x+m)fLuQjQ%wR(9oen+FNSLMp%DiD)IS~@1Jgo86#NVkSRNnC5Z3wbG4?NVRSTw? zLIMU{YH$G}sI{XX8W4~mMzW8&3vlN%GKWjeVdB+vAA+YJpPD-u-U9H+GqniS^HmbW zV3=A!f~dRxz{LkxxhbrYJH=H zQ-^WqSLA2g!a|Rmcb`c06pV~(m+dpkPnO(;g>-Rux^qpXm@Yn9inNy8C(Ozf(MjpW zxn8&swtr3JiqZ?k=$(=A@lS9^Ybj!7Vw2MQa}jI3xjVf+=|t}^o1(3F&cr50Cgk$* zOXK58spztJc~#P$lw53A3h{}p=Q??g|En`0CUksl+x3lEnG20ZKwtjrmu&h&p=hS$1vQ?Q8dvAKxh{-l{G!47MTxCAFG}0XJ zjn0ZrUmckkAxG=d$fWctYn54@lFlROis*TxcPCa|;6%R~IWOUq+-S=FXmZuW^mq0r z+|P`U{Jxcsr<%?f86SCPA@boUe&04G`te++n~#kt-7|i10#znQk86EreXeTe;JBxn z%WXHKqk0RG%X3b2Wbc#_>vOx!&ehgCBP~&@GtoIBlZ*Zw=;dZl$(m4dqV3TMk2XyHw0N7A-NkK7KRlr+;@r|U>?2E)!$0gEn3b*C6EU?X8O-A>a?tD65Gd@ZWz7v#`e;*)Zz(|rS6pW?WxF&=+em2@@=W|%SnXB zmKQf)m8gtgdeP{~_U5xMs$4iCJ;J^Cip?XJE&N4#wmqZ#{Opqbmf4GoZuhmDZ<_r3 ztIW#S*%kXOKZsnJt(@JKhoh}>_Q!e<)HHn58JEWXF zzCXHj_|nRP@rzePZ;RZWvM!B&)S7&4&%#XXqt@cK@=cYu6c*nf?R5`6F*P6kXp7Yw zxoc#PwRl3Quad4-Qa$4rPl&FZ8MzCtrnjtYb`MrkliQkNcl^G+(vB32>T~Js71w;r zJ^L?+{IzA@m>>DV1(69Y_NC>=&7MisH932E(L&-2CvVtpNA}E(+#a29{*!POBcqsW z=`(iZ52E9S-8I!-S%mAI5#+n)3irC~40aNq9YoMjvLbD zBb3-`Gn{w|cgn)37^}*7X4&SEm65_ft_-)N%~2}ugAnCpKJ1y_GEw@?A)J!4Xg&vv z&qB4ZrZ$Ssd=my9@MqDJLq%H#e&|;8KN?oYe>^n(_tyPT0EHNCPs%E$6ZzPsZXq@@ z(pz2 z*xfP`X!3Z%N*e3krbyDrL=uRdgp)lDGvLK;@I)ZLjffbtjV8LW=9T?roD((LGH39+ z;Ur@PkXX#b5UbD>2X4>%W5p)76n%dT#W&qqD4Q{>>1{>i@wVdnY$o;?3Mi0ACid;P zfoXXuyWgH{i!X~7daQ(DX37gJV|Na7^8#zPm5(higWrpBv$N9E+zB^+vxd=mC*2p{ z86Oob8;dLPq-7NOkFk7nCgK`BmTffmZThEu$=E9&5-Ryd;!Zp6#4Bi!ijk<8O_fS1 z?M7CmD-M2|D)A;azAA0t-V{e=jowIev|v~+YMZj$&IEo8cHf=soSliy%|}NLFXV?C zBV)$0;g{mUSQarm+la%rqI8JtnDN|Vhz=CcLeMt*pq zr`tj@{(~nw6I%{$8g4A_Hjq_Q+(7fLjg|7TLZ_XHBggwn*|<@dY^6(0@i_+bGS(P9 zMWe?ydghYH_~Ay$=(#!*O&Iyu0_2j9jfk1JqqpeR6v-`~9WfG_=-FLV2vrs|oL!_I zKYI?mGLf?j7X02F9a)ZcwyhtRj~T_u;7(&^jLvG^o{Y|jCcr-^W7UXsvMHYU+%MO) zynWICz8#@~tBgY7#n}W7Ct875nTCgvkJH^KTez_i!X81jfri7~H9!z<)DYx#rs1UF za?)=DJ*9X)YTy^QO8H4ELO-1r{O$NkGiqEAg=e&!XFrB<4?Q^1@~W169Iw<~jLZC4 zRzAxA3^N}O{2~4B99WSBu!kPJ1L4PhsJ>2&ZlHt>b5?bBLpux7%BVjPicGTjvGI>Y znA57$UOf8oGxxkl;B6b%Wg_#2ftVf>(^(StP7pTCm>JEYhMnfBTz(jS5bQ+ToM=Jb zjqKtgBnZ%2*qw7C_*q2_Qoxjmku;awmW>3ID-qg>^q2A<6S+Ck1cL}{hNvEId@S#eOD9p0%{;H zdUj?LFXIgp$9$k}S$arE>6tmdoHQ!we3}11j&v#!XH61aShOZa49AY*?Np&x6mCt? zGVUy$kScXaQ#uN29iels6p)tlT^gYej)RYt)cw|wQjCu9Z_U&yH!*^M%I`Ass zKaD1EN>o2~Sx^Wto687dr*mPpqso9PxS%kXKFk!HYfvg;pG*@jaZ96 zXTY7SFiRtwd>rhF^y0=-xiOZYsT6Y}&OJ$EH-;o$eQEk&T7ZOb-R?q=%#?9=$PqIN zue^Hr)BAcpDeKe}OXVZR43Z4+asf3MAymFa9l<$@F?dtFV62Bch1!gdr1DWG2WiB2 zWgtKxDQatED%4;o4f73t;|5K=)KUg9KT(lH%}F|YG8t(`w^}S21>yA>bIFlMMwpeN zO_=_Wg5D$R&GjrfxiZm$mBX~Nw5ONxP=RNU*9?2vP!8fky_2Xz2_%e^hbLb^Oc@byIV3%~L_R6ZK1d|MntUbJPV%D4n(tNb`;f@0Y#1fx6b0cq&x_;{9I7PRg{C1_q|tte zO7?amzZ~5S0shZ(<1K7P?O;jV?jKKhTu=^9%uw~J!@PE=Hx z$5iPvM1R^TYK2nGyvsQ->wotAboiogYadW4tVgiAXPctMwABMSo+U_G*-RAcn|MG2 zM>FL!@^Lhlkxip17AInf^;s6rHo<#njs&D@``ht0!`O|0rkH6pV_7qsuSD^An2&)o z@Xn4}n1ym!9I&u10Alm3EXZGQFShZJGI~-Z2VicX$eFlvZKWx8d%P`!Zz&7hh;GPK zB55ijZp_UOzdW@n1-kE`xKy7D)5dlawE>5$&#eau$i_*!$p}79;>K!Pjlc{uGJba1 zF!CwR z^`9R7kJoAJ2Cs6O20}WC{v;-}P+Mw616{b@gp;_4`5EhJ)04t>e{T57 zmjtc`B6OCh_fZV4GRSu#-Bi~+KKS87)yY$n8#x*ps4dS-Huz+)1TsZ+1wXQk@JL$*qAWbg3++Wu_>pWvkG2fPsHVo6 z5hMPUZ6tdF1+=j##cEwUZ+!LjKk-u4x;WLsAEcGIlLiu9oC>rqe^h?VL2RNf2-pUO zMUFgJ_gMu4f9&GVaJFGssBj)e(+K&A3lxhBA`d#6eKB&M3h|^0*Ar2=jWNSJMWkmx zN56BxTC)9BvC+!BR6^8Bt3L}%8`(^pxm>*kz;lc)gxD&NwC@#6-Wg=aa@Q%M3acV1 zmY{&_nb6Q{CF zydp}5^NV&}@W6CZ?84F?R ztVGi^H#^bEIa&l4qsBq;_@Y8Q2)y_@jHKJB1`d5k8TjnN9TR8KFnTCoybm!S!C~x9 z?M{Kz8<0&(G%8JaGy$fIXy|h=g(3@U-H~^VtInV-*@d|keVXAkCusyb5qdHaO6-_- zW00Vc5eTCz4Y{s}`3tWznj87$q$-p_9^QEE;ssnv=bEr`Xr}R=j+pdTpaF|02*jU$ z;nT}Vwi7*5=Hf~6>+8bXF+%oAU4Do%%a$oC`XVDYZ|IQCC#9n*jhBb z|5rgma?{`|dJj0F<`RYv29DmmE^-uKwu9^d!d~PgGOVG3CW0%l>IRX?UqJpK8aKI~KfU>@Mva zukox^Oh28v}c>HJ8)J$K* zh99(yROUP}g#^4B&b4kttvHIq^AC8|O-upXpM7J^pI2{^;K!kH?NHyr@I=?izS5dX z(!;#yg%6vZI0}br=8TM`OWZAHK*!$wLiAXRSV}YS@G5%o`i|Y zR~@Yq$6GVXA}r5oJa3vV#3+{RP%i~f!0ux|^V-96s;~Z!=5<`oAW^KMK~I%4uO}o$ zlB?Ji@S(@B)H0f$2yTBaJkYx%Bc4ur?Yis8j$c)+@5txc->|Z4V;zf+zXqsrz(eJA z(u$V6GWPX@7cJc0DnI^JK@B+i@5Kf(2#q2u78(doY8%-KJZ}Bgs?B5FjL(laW7l={ z-o41su1zF;cyajpV1hGS@{l#5C=~2l%aG~#FK0u>)S`DaAAeNjq-8`Smqm3V(`aQ0 z^bW&Dn&4}e7X|a$sf>8d5b9O2I`6rCm;T=Tb;0RgrK#`mW$xvO1Qq-X4>)~6B0H)f z|JY$vz}NGkDD>$>o>JN%KS>SIiYH3Wvc@mZL`@E>vLY_R#n-)vs!8R@qWa8-&ii8Z z?(b9PbuPP(Kl4WQXiFQ49YiH-52}%J)K5#)65sMcP1Tn^ig4N8B4bGae*`P=L|E-i zb8<)1M>s7(Q&t-PQ;qmV^H+BWwWo7(3;c<^et4#4%mt5@$7uDe$)0W#l&IS_{`M z=}PUo{?Ob9JK&dE2iF6O*7iM^TGs+s>)yTxM{yTO7`3nE(7XqTnB=}KhvqP{lJnsL zF@0O%;>2t{N4O4bI!BOo!=@uUuirNJ_4bihZ2^7lYq!n2Vds&xE!*b4*3vcq!9MAF zpl@%>wt3{oTyx%FuC5jkx1|dNbJyJYTaR>YA-}ovHy!DE5M(mf+y_D2gXA}NB3uv5 zo4-@I=5*{lGH)UXeqc_=S{xS$GMQ`6BoMcC&Z4zP<}|~#>FPy$g{!@F?~$vULGY&b z)~+L0PX(FG)ehIeo$cGYjZid-OXUdK-EdSG71+Qai6 z5JVlGvlYEaL>->93FHw`mYU2 zYvf1dft0n9sFuC+AAFUONBsgr4Axgf9?>GmqprGYE0NcQ`tDsJU0o~C9b3q+YX!Pv z%Ut5W73hvFb5Y-}JGcv6cL%xyesJ}oJ2uZ_E_BD{IjH%(UUbK14535w?h>wpbM8WS ze2opOW$2ELY*;NrcWh+C3a;1S!mwH^Tz!{=0bkoe!-`yQ+(W|(t~qbq!-f@Hhv3?D zgbgd^qP{xx4Eceqs}Ie^u;K*H#jxUJ!G(%Z z%ryrcLc@v^NW)5yg_+^?MXzk@eaE6%LWX#9&gP5Fuh_*+iRa9V(s!j=+BRRD{)(O3 z>Mpo4d9Hm|YEoPIvfN_Je9<-UpL4ElO?u3}EH~m7>!#8R?p(8Fwrzc>vhkb|o6QO7 z6?4tRUB!#O)NO8=y|Dep#Af^4iHFJ_{Us*~lFE(GhZ03DymTlZPs`65Dwfnwo^S$=W8ME!| zsPum&XWQ?~j{2H?esatsg=C*wytcW^Hb-5tBbRujFeN?K-k6-UtbNAAy~VlbxK}2Z zK4ssVEVnOxsMmb@9P5YXL+&&7Q_12jX6c5yP0?ld^x9i4a@%h#q1-j@veburXKpxW z+4!4$E%CU!>{8wmpD;%qb_*A#$2?LjJiILR%$oEEH;%GjDz!~3>J8DFux}9!kt;vs z-rkpV3zua_{Mddv`Lg@8S-HWEp&{0c_}WI+5TkFg=O*WMU)=HmyM3W+UziyEa%xU; z#oUX>bjy~w^xDT(?8rUlo^NKy+NmGT=@u<9t+4b3uOXf}C#`rQmA*sgiO0Yb>E(so zdG>;qO*K5x#d)F>Y>4~Kv)vUtvMyMn4=h0qvA}I>NuV8G))-<^?_(ZAT+SHc>8@9Q zFtz&cugmu(|CR4wJlSFmoCVk-nj;t9>UxNX^?vx9AEER{r>njP4;T0TqKit)D86+5 zhwA^l_{yDcU2?YA_}%WB$+^jy54+d7#q!JzW->SGx#VUOL$cUB+ZpJO9(3d43(I!3?F%Y53*}Ewh=gT_)e`0v9=tsFXIYnK{M9=tGT`-BYqg zZKf>RH`s`sK;GnC++f1n9ZeL#JB6Q7=@ckH9&Jy!?GHCbZUl5$$eYnMx+2KUUWZ1o zkvBEM<5a0p>GH;8K_hn(^R+kHEm<@1u=@;}a#^u}AEI}Mi^v+ih}?#}&$UAdMi&qX zBhZ%DQR`%TSTk%kS8PmT9*_j*u5()wUlz?U#-@&Jb7zt-(YwLUwM}wm_vXxtvaEYo zlu@VdX3@Qcv_G8$f~Yc zD>$)jQev!qu{Fw`YksBs4l`N4GC65=`xJQGlzXUm8D{6X=7=q3demXF(3-T$FJhXU znT&mdxeJra zQeDZ?<;k<}EoR47UNWbomKC2)9xhs!C*5N6t?uR|W^(h~SsmpPUR6)8u{I^k%MK>9 zBPN!fvY$4=F7UX_Y)!1d`{gckLTW^1LvnfXGIK-)wW!Rzv2d?#je5;4XE8QfKF~cg zc`xS1Q6DhTJ?%FpyV0627hg;!t~OKW+O35flIbGe67MrdrLQ)}JYx6dQsseL;~Dd! zd)rIbx*fTLIk&Li*BbY@g_alGo61ioE9P~2Ydnrgnm31eQ{w7b*)cDhFXm?3vnOG) zG;c_>r}|v`QeSgS>KzNBczaw{PP|Ts5{KoLR|-PI5Q2mu{#WGz+7x0C%|Pm)Wx}v&K|j z%3a$#8=MOn;%ZyA2Sx|l-Et8a=Hb-`i&lD1>#t`%QC--;6ziXGL!RXF zfeKS=Hs?8DgGv-7@`LyPNp|F1s(c=c;*L?E{B=}Xe3Z`}+j+0fn|-h`PrMZg`o zn{Y9OMr?4F;cg=ZnGDt_Kpp+?9Z9;wBhMBfaL3+Z5s|Z`XmmoQAQQGvnIR*<@KO@I zFh+$aj8P#-Dj^wDx@1(qnTLvvM$4n$yz-OP#3&Z)cy9Em&d3f)?0vO|1crD?nE|a@ zd&xiq!Man;w0c$V|Ja_-3_HIPjMm6A%O;RtBk6b?MVKIkNrjvix!x7z9=Yg4%^+yy z%S0@q%*S5^-V@S~Q@;Pcz8@v4)>i2|WWTbCI_=yoNz)dvc&%grk{%-Mz2i9@oLWXm8Tg!#b{2op692B;#Y$vpV4^7ng-r$;~dtvS^j zmxP8j=*inoL{_Ewd_!{LJ%s>C-GCG$CQpQ{0}ha^@(U@;Uzh50_a1#<*ekQ@E%t|G z;P)aL{aO0M>prPEHb67a1SvQdpvZs&>)$e)x&=!1Hd-r(e|-0o?~r_Tg8BQOZT9F0MP>Z*jULkYqX+h=96YIN zhQ2w$_U2pj(AriD)&*ldopoYQ>=W~ z;cwhpeQJRD48-CBnan}t3Wp>XkK`--$uZDXLueh+Yno7!jskcdA)Q{YaJ>bl@A$#| z$SdvrPimZ~W9#&Kg-d^n9A3w%9@HExii|IRCE;GukUp1@<*#f$o$@8mAN}UK>d*Je zIN`snhr{|@b-v~Z&m!nMFy)+wWu=i`)LYH~$U$~`Ex!bdt9`EicWLbw`)S&cI zBS4@s$Td)<*3yB?*Hqs^wxhld-Du+|Nh3a)i8KaH6PKl-g$KHSxbubXYq!K_LnBbN?BYm6wfvFg$J)Y4+$%og;0QOVxEAt zK}Zqss%?#ZJAQp$%i^y3Vp>?iHJRI8BV)c?)P-bf1&5 zl{EUwwPgD`#vwf)`w!OBGWmoOyG8?k`5;VZ1=Cjx`>>y!xx3oFP<# z{eOJ0wOC#B6Xj9k(8{d|lOEK)gLVZgAgLF027|SF)OP#6Nv|!tr1~FEXpsWWezH?B zPd>Q=mwG(ZzH;%e{>7|*Ri6B=>hC!QE*Ar7Fgw?)3U{#zfmU8IL3A(@d#+*S>R0A< z+!|kZVFT5zAxRsqHDRHpzuBHkCjC15t?lm?N8{+V(b`N>B}w8yR1}$oAZ9Rzp3w=r zYnV%`8p~Wn2zn#TswuoW_Q$*S#dke=+`E!BIsV3aRDWRZnfTUoW#1Hqb_v(ZaI&Qc z^(Wws@I$8HxJtlBaASGMB&(oX61ACzi4(D#Vs;+-Dao|6tQ4_H*JK*NYYMF0*QcDw zmz_u+FFM%2?S{<^(*c1!MTo|UQzA?esDzwhIk^gxeO54Nq9`jg>i|*6;-wCow#pkMP1PIHD$97fogfcRPJ4ueGt zQ$?AUo5ol)2U;ZP*NR9QkVq&OwRR%YP(IKa+Q|5%&8YszhgZ%Vz6)4!>|*(`sic=? z6er8|b6OaXMTxcVdfXE>)6f|WKv=XRskL+?Pinc08|k(%T0jEqK)VYp*8$mnNt>UfeXM4g_F~Y0g`@R**An z%rK!AG;P%ssTVX2uQ@>-V{?70=IYZjJ#*hCG$|}5VWW8`fYbs zzw`|m>tv~rA-@b$BqJmYHV)W)A^5UE4Kl72*T#UNxFQ+TP-C1gG}L%008m6B4p8U0 zA{;Psjosj8Ud}3PA@#3z$6#cT85 zfD9`c8gW%NJRQpn{7{n-D+|7udC3T0^0+LGrK^y}BwY+YhC6c1!`QlX-_|oP`4NA> zy+7i^y4O}IJqIh(dknZTT2u5NlhXp+q(BaMq=d{nJO`~60ByvtoN!b>IfTtd>exP;V zkIwq!HF|)-(4PE0^`3$xiC!;?`2H3l&w6bKdO`C^yhKg39Eq`~+lT)2ANRlClly6G zX)WclUP85Ha%#9v_~H*mS6e=lQ%mY)A!Rr+WI||_DUuOMQ zL0~})V zWN3DTeux6sC(~uhhcd>bjywOM!r7CMfFS4*gf`Wk(5sM>4JWPykj#)||Cb;6_3thE zm>2@QW;_Day5npnB6MG*qiijpb;dF=8vYQ!L_v69uN9swA5G_}HoQJ8L#mUUcR)oM zaw2L@SJ@!2P3H89Mm2N1vE}TF2yHA9Q#A*k_{dU@!#*-!mOn7G;;13=r}4_Ykc@&*y6-% z#hlTRThMDSPJE*ntrl}%if3DUaa2{Y1GbZAR@YSSFpZ94Um}t3OZ39M((FqnjIl^a z?i+KFYI1c)F;+%&xO48xVys#$wkF!*t;xd`#3>#`{MN*4a4)x8lZc;KS1d>2rucBj zs?`|@O^noF*%#8NBm9cH9zCe~GA)e4JmCeEE@tgGCViz3NGt7FyG#mjO| zUoJ;c;6`0@H}=NUh*FF$F5b90UhS=1nM*GQ1+y}JtKmirxQ(+{cbHMM!UQ6ni0LqI zToVVq9n=iw*{cmSgH6t{iHJFNHM#9vE1Dz$dYL;JSG4!#Tm$q1zq$kTt}de?mfM_m zr!To0Zb|z}LHn7Y9c=~r59Zbwt-04KMFVaVZ3Q>d+T`v?9_WR;axj-9w~IJ%=MV?( z%z@R#j$9Oncxlx4^;R6DK}%d_j_r+CE0TOW^J4FFjO4LyEOp*2PJU}|eE;elL~;&J zkbk+EKUg%+>*eGpI*KnQ&cvhW`PIgGl6o{2>v^h8}ugOHa>gFu5X^P=OgvEK*7Ovt^)U`G3E`-3LfOR%<{2HUh2wF zY#yJ7su0hC;|6G!55M@3#K314O__Ww!cp=)DQ_NA-qm0{{|}FjA2!w$FhP7URuiI6 zCiEI(VN?{#l80?DFbzjUA$M>%o~b%z0$O>EyiCfVQL657va1fJ|L@!UUCNpWEe}b$q0k3cO?yAOiVOk z!7X|6sabq3qVXu_BDmM^xu^s472Guc6v^$Mi^k51fwWc{f=P1wha-_}VrY8g^YKVS zwwT21yI&(;jYk*bk@tPynu;PHb1%6?=VKIl&lh6F+50IOh=5WhRnbk3})7 zCILJkhtd0s0nhl=RB%AAPi6Wff5i`UxRH3vJjL+K3^kxmdvhxS+)o zYTgJFLN9d<-vkcHNcY_q^ z3)Nr$s-Fm9L7G$>7Cf*Y)jWKx$hQs8LqMbR2i~~@XI?)>weqt?SH1PJdG%uqPDuTl z`^nWyub)PbRo`7bcyyOLto3tskj%t41mL}Gtmpx7898<1UyWdR(?!o263xkBo6L__ zO@T)t6eL&mv+zd6F2z$z$7c1azNs=(JeXLVKl&>!e~2$ zJFGn09nmOe!3KTp&=+A8zuJYbvl7)wYY8tYh<3HO%xU3{^H^|~ZEC|Q$Rh7Lms4a! zAu_uh+B#cz&e3n*uz0DyizYJ_(X^ioF9UBT@>J9l)u0_$x2gtv6t@g^PmfTI z`iASWc+dAgQr-6_4aYz6h`g4p*7Yjvk)#)=#|}vzo=DHYFg||KAOF86f2hBV{NaP~ zq}5BOz$+?*7S8b$T?NW)_?rho(!!%O9%^8DyVuN*gV-5z=b%n*X6A zzy90B&-yo`YGR#qkK?K5zObTt@h!C(4Vq7|Ub4nY>a|a-ykz)So@UR9Qs;J+KQt$}Rn5G#NnP zzc|PT!Gr=$7v&>EnMe4o`mUQ+-urtUFQ1&@TVaK;Cg8J}JImAH9=grOL$@tI_$h1upL*NLD$%hz>QGrX8;^WN zM9@Lc>H^hjsen6JbRLI)DEi{7gtd-c7cBXFeEJu}o9V=Go_8voX8_U)oM(ceUuHm|Os@CSoL6fDcwUyC6{D>=KZ*fDh(m5qz*9s|5rSd^IO)(OwWk@WDhNh>`Hs z3_kcoP`LxWML@zt7Vw=tOk|E8%psrWyusnC8E7?-o;CPth4g$xAw83eBRz8$Aw3^a zNY6(U((@68^h_>}^vqp^^n64iJs(j>&qox}GjlPd=hp{DdVW<<1v2-71cAyehyg0M zz~UYdm7B=osNBrOP`QN*1a4g^QMtFSl&IXB;Nqy<%*9Z-H|>$A+&eoYDmPpLm3u8* z9F?27T6O`Idu<1ya_<6^_1=yL0ALMQ3tSRx94-ON&0W-69g?iB4%J(5iQXa?$K~d( zklrFv32Ypg?~<%dAdrKN6ETF#joxAevfh$pweOt%nZ7S?s_wd5OgSeGaO}r=mH@{B z*B6M(xr@eHbIp_lIIe+u9xVWlA1US@T4w%W&1Q4v-@BLIlx&j#$F)e$bAF4Eo`VfB zrh6eEkK4{oKK8y`9jIr2OB_tP<;$|kyUZ!)S?#4ztmpEAWrdb^J=Xqwvhs}iWw#FM z^|ygOy}-Tp!o;$dQVYVto(cB)?qbVR0swrgtHWMbblB@FG}!AEz%RY?CUc6ryf7hs zo;`EJoMmNbtZc~&0PxY>wjThz^1fV_n1b43RC*(8iUH7``~Ki>c7637yZ*B7GG*;6 zbWnWo{^k;oCIO!Gg63cQw~wE-a>GfGc#frN8fiQkM3{g$1OI^q7%l-Ks%)qMD^WeN z^XSpDI{xd;BA6)Wbg8JmQx>K8wKX6tQ3%*=X)B@w)es++y;rIz54 zWHK#Dpe5?kDFdos`rI8~s6KPCd>*1-uf{bMmPAoaM5lYPdG+)t$5!D>68q+zd9*ad z>|D2wAS6IrjnBXyb#phifA)13^_%XAngT)KHo+#^2*^&UI4Az9Kp};aLXllD^&VaiDT7skoF`1(HV3*gP$jm_J@H0KeNy#K-w8r zeHlRN$3yVw%KI5K{{}zB9xQ!hFzwWwJKXz|?IqOenWP1*e1O1jo&q5L9q#yWnr{cq zSLQrmdLZ#nVMzQ7fmc5|trI=s%l8sM|5N7UF7>B`;-66iO^=fYTF`Tdz0kViX`s*t zjvgohiyuJtYg~UnS2#rf7=}V0>}L;*-*@-`ys4uJvYv=O_*d^*_s(~${Mit1GSPU! zKV9C?QXaw~282Hn^JH&U=8~yBA1zh5b8PDH&%ae&{_F72!SrR7)rb?7*L+0j2=IF< z50M1%~WMnMh)o0`RTsmTmOh)nrDA2c!jOOiR%$S*u;jsBOBRMnf6s(AGPA=k)$3PC?e<@!YDclYA!Y)#C{=m=zUqHe{i4X<3;_W@8pr zfc;AQX45HE;sqns9=Du!H)_f1j7dhFIkG;_6{5~#rl`;~*b+9SwML@!Ogo za&Zhw5n|9roZ2$;X`F78!znH}(aTCM!%EcicWn=}pDUEW^wF@|=1d;6=mCKGKq3Yl?6BLXrsXFX{7OD;_fsP|#1)Efz zL^mDJf`Z$S7i#I^ED{u4J`RH4PiJ%?Z3xAWy9=oZ)Q1`Z=hL)rn1b`UlAFmpNb)52 z+=VS!I-ACBFQI;D)Rr0DHhI^hc?zTX{vge)Mk|;%H7klPQVpjNk&uB#rCGC%N_U&o z2Xy?(X0#)Y;GsTX&Dy>J&*UA_%ahy^>*Y15-?h{=71pfH?AR3>MX+YoX~vN}lvgOt zsE_RCj@0YVXR90juu)z;S@GmBQTZv4T8I4ZQy+kuL#9`$q(}YVvAMl>ocVQ zh&NZr>@^=*d(F$E(es3hzuVIHm9zo=z*lgv}!q7koItq%qL7z^ZtUCEd2Hr)i?f`#roa8O~115 zs}FBy+V^h~q3BP3NhS}ihl&*%+L-5rz00qwK66Q9k$pTknBeSFFmMe;Vs+7@DYHO zQ5LUn0)GHU6<8(N0L(|ojXQs-(&!7DPpnMTSSU;J-s1j42zO)D@&deCy-ag*57(<>1cV(myqz8bV{nw(l zE8q6--}C$BLsBxX_WC41&(f$N@n!s3Q9shfD#J~>MK9~|C{B(Hv~|xq?hLq|4NI~= z)M<2T`o2yMuqgYZ5$}DZdc$lzLKx8q_mAcpvQ0iv^^C~Ph}J7db79TJ$*%FP@!%vg zq5~DEiCWL2de;x;|KZy^UiVa@VSVpKF6U!TJYR_ehy&sgCYGWK%g4D>CqViU2*9i; z-U660#YOFfo){C&^`!Fg0{H@as3(iwwT#`E=V3aVkBvgvL_NTjEMrV*SUP3FkurL6 zlmKli=tNEEy4c9O(Ttm8lVXW{1Sd9;H_iU^rfG^0Mx?lq5mOj0@o%jIa%<{?uu z5y0>;?1BtI8X4)^2!;Dt+?3~ zH@OESP-S)&>1Ud#X>>{%?op~tf!<`KG!KzM)T++A2zpp zDOIF8nK19_fB)aE8{e^S&k*km^NOGzP&A4h)N_9{8`ax> z*7~C}mW&=)@g(b)DH@n~GO+;aPKJ#ygGO6`D2W}yXzr)Nj5a@IK<{A9;D0CflLweT zclSSRJ9@^-MfK0{2ut4p$zjO`^b>92Ckv^FSn^~EPnE|VwtCfOZ~zlI+6LYl>T~^SV_eUh424=mrSqz#|)LY zW*Sx@{W-!KNX2KQvWc0z0yQNsH2@$*(6e~Kl2cqNkzxfIqNQeDh^eyk;>c_`=27** zKic>Ek)t!bSwJDWs)B0La*vGG0RV`PH7aWpvCM)g zwessZJO1;~CkoX=KdBc!RQ{l--`a;zEaHcR)T?y$ifLo-eB1QYL+VrwNXM zL{;zVKW|<4leaI~>Oq01puuyn`un;vtm<{B6hky5G%S+<5!De>m%mY+_jtg2a35v8 zM3p7sK5zLTYof>#0qR-JP@a!W6ZYG&`tT=isji$F7B*OZK3aU$^g?v+8WJUqdZflG zJO3v~uD7dS8`)UwlM^e9s4zdRG!{(MdGUBCqnJD!Bz?)D*FX08>U+-9@_uuienJMW zy+3|Kb*}!^h$Y{P&L3a@aL9(TIe|z@4(UG+kNV@FQe<82+PdWZ@uOqkJYp4%9y#2r z4pG5qwal$@3_7a+{x5sXv!?&~P~&3+>(S_Q4XLt8Y63!Xd}YL||MlP1pMEkVXmGty z$wulIRtZU8SXh64)py^w^7ChW^l*Q11}V&=))S1iqJk|UC}blXVU&h@DMy2?x8!RF z{^siHIH_r@6**{5lK6$xuL=LCzof=1+3QG7q(-BkP?Zr{!b{|36m)fda^H@(Z7U9; z7>WAQr6}M#K6<@*psx`WDLPe@lVlQ>qsW@&-`{QDfx|cSRe$<*5oZx>p_^gDzKNN5 zH^WpPF4(Y7oi9zi;Swg^BjMsE-ptjq4JO_rfk3bpuGg;bnolO)aJ9fCO}ydiYS}hV zSgyCghMgPa!*vKQn0PbST)5_*4+MfO%rz0N2Zc+Tcu!|~HX5x@%E#CsBe6}YPz zSOna}n~32i-i$0}kgv#Up9)|FMqoQgIJC2UTh|eC34?q=Ac#?9ftUw9vR>T_VibYW zAYTvz%XL8v4DuCOT^?EI6S{yRiyP!KvY0`>B5U3x5F-dAV&*J@H9IF}2zqOa>a8uR zx8M@J#axVp2UTxzgZ%lM4lDQs?jrbv!wNp(@NYkSf*=dM1+oOrz+nZS00IeJfc4gi z!za+#;_wMHwm5tOjji8g_=KY$K5*|7)$ho?nA7kHKnxgbZ%m%#hNyuI82z%D{DoV9 zO1cD+_=Ndp!6#go8uc~%{N$KN3dugVcV^zb36gYLpqI#k)KHudT>`b2LQg++mnmdaua){qtclfMbHw^JsCu;7|%POlifUG=4;xU^4?9>prKand`kdA)64^}k*Y4>;5iq58sy-gi&+vsX0|_oT*=Z%a{cqCiXQ*3o@Gvh6i6@m^c-! zGn)WhKvSe?ZZ?P)U|3~3zzIh?3giMO2Q4t<04*TE78n(%Y^?hG=N|s%C#utmjm18RvAjz20mEq^GE^a&7w9H$@xvX0YUx?qG%BMS zNA=3?SH`~m(VIlTao`D@asUb-I21quFa~u26vDv-AS(s{6xtYoLS4{^egPC1mV^$V zkYoS~z*X=AD9j)Lg@xe&3JZr4Kw;6}^?l^}>gT>(!<2*W!ABN`jW@(X%TzIxLq<~` z${|DQ|5i7>zV7S8mq62Vh%ax>KyBHj1kl==(B#Q{*)&2fFLG^IZTg_k7eBBl`}U4^ z5A{lwoD4}0WAw;hfsMVId{l)3iOT^RSnkJBU*b) zDxw7eT9E2;Nn73D#UFm{zzx+`{zOE0Q*jfxX|=H)eFlpfQdUkFyK~aAQ`l7#Z~~N< zg=wdQBkrt>L})P$aK5CNM@qq?E>m080Ueg91YcdOfBgAi~E zTNn>QYyO608SGSu$SyN2;6prTIM7z+1ER#Lj625=;YP?X_=>}r?ZnKfOHs>4<}lw_ zh$)SgW38vjiIqgi36>b(75aRDQC}G*bwEK7LmV;bqYiU8zNnnDXmrENiH-rt2@n$~ zr&T#JjA%moG#(j^z-VZ6pwB<|SO4}m`*#fCA`|M!E~@N+4j!YCm?{oW(%-%M(@~4Q z_qGXg%I`1gZ+ln}P~f+np8E9<4)-_bMGh`x6H6w}_z?ph1DyslAX4x?Z?kB88*FM} z2uPTL-FasuAB@Uio8AV8R+|V48my3+p9F_rgQoY&BATuyNZLxy(9Xj}h zC#tQ_)^ED{AsIeIQ7O9klT@%EA7Lj&PVdTj&VUPjg60Wc%wE{%+2(ty^N`1S7F`)M z1X@MA{&mJW>mAbzyzUalf`touw7BRW|7H0eC4m*)*O56BJ?JXxFVQ&UqRwMKim+T0 zFmAK}e;F*UxPc_~{JF%H-bf)tW*wM1tS8wZFK8inPv`VFw zcjL^n96A+kAu5wJR?@)@KQ{!C1wmQCMkm`ef8HDmhx7gx+~==e0)D z!S}rPl~4cPx_fJuE09fvx9h&|FN8}~gw?9(+JT{pqW2~ZUjBq3Kh$%hoch*L5Bq_QE#(*y%T za@u}F-*v02*Vr&Z_YUi(J1H7J)flJ@xG@H*G+uKJnQ5?eoRosd`lZ%5+HJiOzDxz#rz;3?%UN$@R(31kE(;DjK^}O%Z?tm_{eV z78L&fpS^d1lcKuv$7?#RnItA*+Gf%`B0Zf#+EGAR+$8_(FZ7f>(6%TtnIVLjfW*zR zWLMO6H|{HRl|4A%gOwHI#$TckCd)v`sDZ>JzXV~;Zq{sq8gR`M>Uny?WwPC)i_r@o3o#-hSY2yKMK0z=;rqpYw2QZ87K zg4Ib@)H_ch8m=DA^+4yv<)wq4@;@DV@Kj&=_>`zYi~%SuttDz&(juZ(kfqI|ayX!B>Kly7Z+~Iu z$NeQ+4A#+-{ME2W)<#B=G5Xjx>M0m2?TleXDw+~vm&~qeHUH3p3jD!*`L#Ks#K`u4 z{)KJt^GhoY))A5+kB_7-*-T0G6@nm=X2^VqFFl3t^j(ZUNKCV3ogpr-{K3j+-?;k* z`GDJ>vuSeIKwk%-0q{feT?3n#>h14(p?4nfdiy(H=q&^LU>>Nwp!!~%w?$F|Vl1=X>Cb?f|11B+MVG(D)^fyKKN)w&C(>30#YwF^|&20@iU&Dt`s zp$mu2L9GS_>;pk{0{ftIBk?)`7tq^o_x61o>!L32? z$c6cVTU!P`U7M$4_xV2;#oKX(;bp&n!$l(O^)}Zb!a!~XZIU{;Yxit&U zsNMnVv6V1;OEucdTAXE z!uMfDy|hlvt%IP%++u3rGR&=mo5AC`^~zl|2rt8odgU&fTOXsj1*%u{7E|0?JEdFm z_IK(**onC%+yb>)^p>F1+%kGgIEcA5xIxV=I4B1pIVgLJ9pv6pZgu{0)=eL2T-h&= zFh1U~eyV+Mso2|O9Du*qJOJNj9Dv{AR-a7WcB4JTy~UZ3Ij7XVwxhecaCvD1eu9us zz^7)HF1mZJy_Qh^-Ql@&Do%&#D z%Eaa6j&)-e6(=-RXSAelx2K$wFMAKV%LY=eGo$6~AC)>%=j7YH>r2&z-A?O8+sgPQ zyq$LDdi*-#oVin5KTs+!c1x3*Mm?YINUi9cn(j_7bg!P&)css~;kFfP1&qS#WBnUOLC(d zA_&pPIYs~BmPa*raV>g&S85SP7c*8H>f%s;`i85Y+V zsu_Y{yW`}jK#d6|iJ?M3^w8K6FBzw@>E z{`6ic08oN9AR9Uvk^4$x1PhzLy?-~hDe7!d(j1~{Eh@CnYER4r-%e(IOF zMf|F*2^s)Igr+<}9{_oP&d=kgeO*FCz}+mzkpM;kgaJSA+uC#wAtHe7v_%mEj@)6wBY0Pg$G{^1BEoZS zstQDeg=7|EL#)CN6$94coP5-29Eu~*fX%S0?7=RH4ngdpy(Z{`5In>bC|N5Y5k_UA zey=5bh!~^<`=mfh`0oC{@Asehe%;~u>J+F2gyxNycfq6!sGx1N0IP-7tf!=e9+ey7 zy7X%=J6#Xlrr(GgLi9Km8Ri+@a0BF(Q7jt`SR5^KnM+t$1#p-KK6C3g4!mX77f;|{ zjma>>CuO?!K@uVR4SB(j)Cvg?mGN(U-=WVXUOLKmAcoRBbeSHyno#mJ{bh7#O( zYU(IuHCO*%p8ZVEGxHl|!Kr|iV3qKiQXX%EHmykH;}IJ!P2}rBC1mkdczL~D@p>d` z!}>HJ7us-uuNJn!KuTy>p2)7sSfxzPy5GrJrBXH#3m#z=@Cy8hVxmw=C9U>MvQTPl zvr_GiEC21c*R1l}_SN*jtIMFJK#m4AHn0kCn{i7AjXo|_LX=muah19bZ~M~B&;Q`8 zzkm1P1&^zQ;kDGO46ZGq#fG>@@c*3t9$*z@I#Vl{-GY4?c4Tc6 zUF;N_OKI#3?NoOWfL3=X$#0d`i&pmP_x zMKl3}s0j!o5B9PgH&OQ3yF4|4?c#bnLruUw;8$Vi4P7v(=SY2Sg3mBhAw%qK**a^} zS^YbWHy7)V)8km8X4i03s>MgnF`8nbYBh{dX(;pfz(Dhl1Mt~U*{hgQOM-5q=ANxf zKuBp?KSY>nq=O=}UOc_>gM073${+i=_|jL6tGh_`wCRK{RL!fUQgx+v9bGLIP%LWd zsruoo-}j^WS2a%lz=?kQURt3%4s53`t+8FR40+OE_Y}5_ZldQy!cm$`zd&uc*&TFR|uUkmZzBY55XfiS%pagnr0op zH%^l-3d5iQ5-b6KQc2+CMSzcBT_9SbWx9>dK4f`r1NM#=KQ+fIiS^tLdj1i-Zi43U z<*Jf6Pc#S&6sk{)S6+A&kNjZKYwPOlwEx@X)7;l@{r+%{mL8|k02?`xvGoX1pgxBX ztSwTN>Rt|C(P}2~N{$8(91Tun?fP>G6zB6s&ne%5H@$Y4^rD5eqnTzZy zhp*)bU4^qZ{L$q1Ci}bfIL4L+OV}G)3XLs=BrpW9{)|X4lfKA+C%rWL7Q;+fj8*Yl zd_ELwZBteq2etSM5!6aK{(W!ZQi;pW<-NH>6&a4b+Ew_lpK29d)mUH5HOBriDs}eaBe|#$EmI{Afoe*?((jYMUNKD%Jd?{Ht|$s;ChaF(5t* zX^{>SVZZ6YmG64flFv27t2sP(h|nCq@^B>dcD%l@^ilgWEY!AWDP5{KilOql ziXsA!ne)t=fpYV8pFBerkC%upSkN~c1YPyRO03K-F=!>H zE2V;f7XUsDLDV2+8zMIxDxy0?mKJ16`5X|$a21E+^Oh|f)$2YB;e##24MN31@bfs! zq3#gOL3j*__JsYLUmg1IH-2)XQo~mcLWmO+l5lyQ97mu|nPj71hPpinse)RdhSqhs zQvZ)Xdgz|l_s>x~6WkAP3k5_es5JH{^4PD(Raw{^bf-*}8bk{!n6~7_33vO&rAq45 zz8WL9))D^;`T2kLmT{|3`eSyrrXMLM`jjA2AA1UnhSx~C@7{xd_U>m6s6T4FM!br1 z<1oD%SLIaY9n}N9_!aJC4}pLAsL3xTKVGeC=d1M%pl*Y&TER18fBtZC$$;8Y4YQq7 za;e(Waq!!J?Vt0`VfrYaZ|H_}azn-h7rdP4v_&@KueY5}Il-R=87W2qg z;8Sv*Qm5_y;NI_F=C8iCeh1bJVe++xS-<|tQ{s0%IkDgW$$RTqgvU?uZVlPF_&Ti8 zar{=KRMxrb@66%vuVLwXZ(I4c!t3lYht6p!BGw92{0nszu zThf_2y|po>x7aQ2ElI(_O)FJzZCa^%s~42$Ev9&G_3i+V=hl{4Y7l~wb89syF}Ij% z-HN%jdKS&Ct#EMHEH$@4VQy`uxdjT&(A*Lf_0}v5LeX2ZF!Y3jpk!|mC3;IxF}+0t zljqi^e&tp#92A3)oRPi74$|DxZk4wz`S8c*zvaH$PU8*~7j7$_p8^iS&8Kk(PI24; zb)P>uZr;ai#n%5EoVM(NxHHOd^pxAn3>gmphqsQq?2K7|8uPamdaN1i>?zyZ_r2rg z9q)Q(#u5C9@sxEn{%e^2i~o>g;#4b~f5CyRJN^5vKGp0#3VXv35*~2v6tDp3OnR}} zzShRk{ikuN31_B?Kp8k2XZ~?=sqDE6T^#wx(S00WYEQY$b$|r`;hwuB%0L>YteP`b zMj03{&(=dXaZBq6I3R_eqMb;>b`ihOG+}1-V133pr;z_tvC6s{{1`dEtbW%Qa zus+odi~~ME-vs3_wY#|12Ka!BV_X0$m~E$VY0jkK19Y@~i%#u&hwkL9 zI7Fwu=5C5xzkcAsPXDft%HF87r5ml~O^p>7ugK(yaz0s6Z~@2B3j98njkoaa zXdwJ=T)O*ub8+7h>Ui>6**Bj?1~@!20M5=I zJ2C*Bl7ARjO-F$YP>Lc05GFw!GC&g{1CVqKG62v9LdXC>L!e{(F=z-AU9U_?1yP?} zzzKl8-Q^arhbFv$G-D5Rrx^m^YPX0zUm0KnfD-_W0AmjXF0Y)tZ_#r9Q9j`Jf7f}_?mT1Gm?L~qqejmuz!+kab@bNr>%qn!MUP(7 z5!B=!4ZX@+TlqJ4eDkNg-i{b89lZSuwR0(NYC9+-{?5C5<;{a~kg zK+*rqH>dr_ndAQ75&VI;Hmauv=O{*c?4#6Ez+3<8Bk%iqa{e!lVE1aaocva z6*pn8mdQt{H#)Cl&iUhKoiVjNZUCRdJAzNrr{s*bs{X$}J??FZUw$MuqJ_wLhQpi~ zs<%%HUMh=iC7zjQc5u=rB2}oW4VU=MdTduhN$2el+p@O)_T}?G=KsYoen_-tF^gzY zS&m9wLzPr;J$yK_5oc6g?UZ6zG+4ta;_qd5FMaM!;|?f@7PTIS>rjrpJ-lg36wr#j+n-v9cYlOJoG_NV%M7N7Hrj>{HSHAE9_vaN#F!wmYNV?LOT%MquT zxub%Zi&0kFM4S{VZk_tlz5n;Z4@(uQTBswjr>9huGPM_d@-Q4vC`*aol8zjgtkn?5 zDMX_b%#mz3u%dRPkysf>KK|1~>90S2Q+O9L{tZ=DQfM?RaVtQA)p-^mEP%iad~YcP z0@$gc%^a~P4)oQpC&Rx5Mu*k;IH70+-;Jt#H_;PH>OE%G(pp9gZ7&4%c@MqmM>+aW2d!OkxgvPVJPz7v3 z^@3(bNwyGZwixd~h>$_5BvhNHf>jOAAq^j(baF(vK4K~p)C3vDRA*7Sq#|Y26|pc3 z){R*9{Qo|5$zS^Y@7G#lh}X&=b*5eW(u{lk8{ZM*;%kj{RQpjU5`}D1a)LRk$CDB@ zN4MnB$nC*@$bzJ?=4BgiPFnakL~6r?#=-&#-CEw0m~d3B^2YUH`)E|ErJ4jBJxsSw zdf~Fk{@afb)I2++d3rUWrs^aLPNlIwfi{6>t4uw_@sR#dzhe2P5lBhaSkugu?hl zx2)QdpiNPx##%I{qSSDv&=@Gw_p^Y7En{GbBevm2X+RpoLNKqrzW>3-YZnF*!=f;y z#l3M@(nlghYSC4Zq`)5HTqjW{7{-yB(X2ms-ky)Xp?}Rub4WfHwb0CKEDe)6e0u5A zuYCLc{@kwN*EnS*kLpf!N_rc8a&k&KF+8JBck1xsbV^B`?$lGNyM|}%@#$3B|HW^G zhG)gmNbwV?n5|lUT@U=x!B?Jq=1aytxxVaSOUUJr(}Ho>ddDOn+%=xX)%V|Dm;TTn z_;){bOzm;y6Wy`YsNv!;9QgAu@A-qbP8)l?wuW*vpV&byhx0H-^#ebD`F}p`fBWsj z2+ZL`(6#)IkNI)9I>)1&zYat`hSEFv4`1&8$m3r+{lffEL5eHmxqBj3CbMx`l!i5d zm+pPxPu}fczS6Ax8l{iVefCrc&i~r4IRZ@@znRC6L2xo4_!Bt#4Sxks(K9Fdt-MC+ z#{&IO9ubusKa0xK-@lQ1vdIE7#3vr!6kP3|zyxWh2pR>sF12FN4Wr6>oMn43|>_UfD{uPWyHM+gs+9!ANFXT*v8D)fgGX&mL4;8-Iw(>EZ1fj4FPZxK ztsf3#;<_&z1iMDV(KF-|@mK|7qQ({t$>a$eFHwcJ|Jr(J=UGedJd8VWA&BTi@arYx zt4e&_oO(5f;PYQlY}J(&vvv7bkGRVIe>?Yi4SUuP?e8$$wPGH5>jss>@!mr0s2vtf z4A)!B|MKxAop1*nAeo}cbLtAC6{-B_`yGrHpDy4E6)A#fAVFKyP|Rsj#sc~S zs&hJ1hX`yVfym#F{Gb2plA9X-&$>EwUrX%MyKCxAZL{h$}CH@K~f0=`;U@eH=-oj&;r7FgsueAsMk9u}| zY#TOG7FH_kg z68IO0cmWwtVd2tCHzfG6kCY7ej9Fr+3Py@%s@~;$hvw4ve`-loh?E6VVT$YQxM%Ns zR{eu|7cVSek;2{#6p3 zzxJhfkM-Yu`t7S%DZalKwf}1$_WWL=eS#W2-Ki%i&?mB))17)EqkV$fI^C%!D9|Ue znbVzmBBOnR+B)5-#~SE5UrCQu?U3~&-^Q1~xI(+u!vyr5_IJL}TLwz{JWzW<^}RT6i=+n1Tl(kh-2&b~d3FDs z{i_!Xs$>7^R$$sMUJWFBP`v|-cPXlM7a-qv5wEoiRM!SUl|jwgGO(cwAmX4_g97-w zpgIBm-no%@odAFD>|3&WU}GmB-#hyz?;6-RM^JEK4#3~%^szGlfA3Ik?S~72Tb(a# zQf}>qgMnKcUxYK#L2^dB)va0^KGC!n_mb#D#o-Wt@sMU?2RLET%R0=Hyu2?wdS26b-@ z>fRdEy)_62MQ?$EgVbAtY7ln5qU)uT>!2Eh9k0~uEpkTmmT-o8 zOE^QlrQE^~D=4=P(_6CN`tZXF>s4(n58X`Px|2SJIs z#T3u2gPXzQx%J9jGzc%ljC$oRnp+K}Vr~hyKw-d9 zZwX4xEu*)@aKzji+@R(b9F&8Q9F)Dq4svfPw>n??v#-pbaAyCHCDzU39qXss_m+yi zO;6hwWo}QmwymFIK(ncV;iL-{!WB zNo~6#*L=WrCS}GxTy!4lPIs=_*1p&+PRdj-vr``|O_{j7+_7%VqT+<6>Wr4u?e>&& z@@4NqciBM7b!N1j{i9Mx>YRMLcYUe4u-j?9Xj}QoRL@R3bA72ZHD~VB)(@1*i`~+s zrcuwQJ5nn;r>48p3*DG_P2~HrRQ{XpN8>Q!Fa0U6o>JDZQcJP z+gAWnw*dngh|;AZ5T$d#r3MP$LvGapD)tlrT3_P=LOYWODs~>Y)C`#16bl{gtRdkj zj51KMW00ePicKiWfU{m>XV5r+xLrcUUX!Y3x;MLa4w%mmxjR!munF+oIly0oUG-{! zqn{|fD*(&>7J+3y>Jcn<(>>$_#2tV%!zywDN~&WCL;J`*9t8+*D38K}9}RMJ)Mo%n zA2mSus0=xWz%dj!`OLWCV@pw=SJ)|n#g6pyS|FkW7MptcMxa2Nkm!&eA91=WkkXF^ zA)KMosh@9ucK3$H9eMeOt`R#^_>GgB8Dnz!7Ie$g_7kZ-n-~*P_s-3yZZBS*I(vhi zX+B^(lT-QXv+ho;#KgI!G%J^GS(iGeG$Rj4_42~yx0J@;N$`=YZ>&1*bGfUR&nB?R z8=B@_+A{We`&qzC663Pe+tw6Y#`QdBPf2$dpG+Mn<}U-{TPVPTPB;^rQ`t_1;uwBiy|)cvVD7n~K< zg?FwjW~RW7Roz{7(~9R(SKry5!a%eqxZS|UyuzN;w5Hv8(A}3yPXOTNxYBdQh3*=_ zW8P{{cG@z>7LdDK2Zr2;yJ*ik`|g{1I#Ym*Z=HSVjQrT1_=rq&S8TSgZz`t;+|m`f zOBjN4R`nqpxTC8M)D6j3V?y$*`*i6BI96SoT3Nh_WAcl*m;ixvQd9E>Y=Zo}AvJfd zJ?i=5v#F+eHZVvhJJ+W&#R0c?h25M1=i$;oE?sS#c;_AQgJg2*;hyf?6Q!N@MQh65 z)$Xj^zMSji&nexGVZFBOUEj0Mc1GnRql6JjYhqGTqXfY3h{@G)qh#XpJIqnipZ=Y* z^Sb}!Kdc|ed&H^m?KlQ1Di??Tb~sozgbgn#;k6y{H+Out@X2ocnHewAxO}2ow8iS_ zkIFq=L0YQ%b)q%et8_b{$y1ZeqeC2T6sL|itLV# zhsu*x$LUTzS$pOf>^j}4#}K@ewd(0kJz0C^80gi5BS$pOf>^j}4#}K@ewd(0kJz0C^80_NF$VVUcGjv%7=L^X*s+FhO~R& z!1YW0(qCz|B=CbETrRTuCwQV_wfUY}R)`ZphYFR|W~A4$Agi&0Y9vhy$;V3M&Blym z;0-wcjwkoL{H8tUhJSVpRSbt~^y4Kwr zBpZnfvnvwG6PY~zW3mP*C&0ywUr1pjwVaf|ONEz&A|rY%=w;+ps8PR}ZTrSpODam~|jN!6tAIOSr& z(jBddn!4e5*A^3peU2;2HhT0^hMa`ZeYYK&_}gbZ*B&B_gUmNNf62C zuESR&iTqGvVQsZ5LY=x>zxl${C;az)s7^7l^{@;#K_wJwN;M^dUGu3`)s%ptcS?{F z3S(C1P+NKZ{ij;MIxH=fGo?bD+60^Zd4G85*KgeMxA6k93R}Qo3>%%JR+PWtBG?vX zureiGYYd~1*0Q|_E8FPEP>`yun+TPgZN@vz{p8=banCnjf9>*6T~ZgfnuNk!S7<25 z!p-PLf+~U)dF<=JBxSBFbvWkDn6JNN*->mi_$_7+aWS~1t#p#aJitlQv zM%9lQKjDVLIS*~9K?xcOJx}e@2af>|fe1_J4^$A9AK&=GV;A|8Lx-jehgpU0bIOUt zB0<*VMn?mc=@rIMO?=}%C9?EM$KEyyi(2=Dbl*g5&hnOg8t}{FQAw-GSKjpWNeaRpHaJZauL2J4l z${Lc$_=lox^s4By2R7vA%x?r%6iqwshQqDxQ3jy{NBunwPA#ikE zE{!yAj*SOy+H>elhdysC)a*oDbA}eJ-rx=GyitP;l_`cxtUy8t=sa64ToQMA(-qb! z3YGrwRo7lJ_2A$1_)Fgx6r-JBdmx(&wn(%Jb1_PUMREISu~wUvg?^=nG{{meAWfWS z?W9=OWlFWAg^l689jo?swuQbtdrFixW!WUM9+q&Wjn{Hd`YK}}o+D)&{h43iG4?J0 z^F~=Js*pA~Bm9vixS%kw5hM$XmPI`hy}v3d1g^3+#S~Zlsa2Y4xDm5?BXB|v_1SG) zi9ycF*uk%Cx&-VI9_EfdUu^>Cp4u6m! z5iAh6Z`Kb)RW(s6oED|hY@v*b1NA`!MJboC1UoG$*|}mkAPQv9cJBYPNS7KVklwDU zQNWDE@uBE2cgI&=nls;Dw^#}Q-K=9gu;_Zr00f&i9xz~_x(4T640JQ5%AodbDFd{v zJQCFE#r<6`397Zf^QFZj0kO9l)WOAFKsRHm71Y44R)DrK)dlJmMRmNgp$q6{;C1W= z)jKGtPEeia121p`Q|E!&D5>)PjdOr*)_ERK>H6jX-E7WzKsW2_0M#)OSagCK53s#W z9l)YXku#g-!5OA{=fRoL%B>&FQ|N%3;LCpU>Id@(^N`@?h(+#o9&FW4!R(EJQ$$Ip zcEN$bDRM4dBg83;T56H z39qQDLSEJBstvlUHo!mO6)4$NOmVkt)Lqr5yQ+`;yB`9)m7RDes2nxgFd( zK>jM<{NQr?$<5AK^hBz7lkHufx1V+G&vgK6Y2vohjNI8bUP?#U8Vfp zJ?loFz22UXS13LHhbNCF4x{GQ!ARWh)(gbM0nxwit%lo=nq-aA# zvBZ`42VquhjyD^zB||e~_9w9wmOS;fRj=>=bK?u2s2OROnY=-ZP_;@!QsLsDD9o4J z6df$yi%OAtj$ofdMS9PxHD=GMSA{o*BJ^9gnk=acbiM5)&fYi(10_#vd_l>8$Sp7z1|M=qEdToE ze{;-xuJUhLBg+jNgi*{V>p2^AUO)x=%b*RIYg7;ThWda>l#tf(RSc9++ngc_vq_2o zl9xSeJ6-8Jz*&+P82!s56@v6|2Aw1qA8SDZ&oT7bm3Kr)*2zQUo5TiI@qv)RYU9 z(3^_6bg*EsM$q0qrL6^i+*CARLhC}K zE^LE)4{f`~ojz05w>}F zh_KRa!jBE1qh8bl!&a<2r~O&LqryQ23A^lD?qh39&$dm@03UUxM!{V^k=QGoeE_Bf zK&si@+r7s+N+cfkyr(We>IL0XJ-|w~Uf*+#i~dfPb4>(pyZ!?7_dd^Uy{ISEtszn; zy#KzBp0RR#WWdto(sMx1v|y2>RaTVO%r#8RpwO67JRP_sI;XfP#gwfYStd!5EK>8z z3+CW<(GI5FcF_zymtdE$(&C@0BCm?$$(ibp9y#kPZ<@SQ+{{QwHgC459VPczk>QMJ zU#cg6NLmRh`AD(ON&@21cC{I*ab}R5wv2q)P8!Hd%~lnaM;@0ezeR)K$!c_cX6xR6 z|2Kc)wM5rRx=m#b%#}P%7*#b-8l#KIew~qo)*USfBqJii{KHj`sx$NcuHK1Xe|*Xt zB(H8uTyA(1F+|sk@k@#tl}!U`=!j;cTsLCyXq<^i%3F}=wkSx~hvNm}ihWTDj9W~JKm$$T|s-QSXO?zi*VhU~f)tCEA6j+3qCZ9ADR z<0o3v*`vhdz!MzkwrQe@Sz;WdOZv8fgNnL7H=%MgGF4S^ z)r^2Z4I!0n+%622iw$bf@}qe~A)$YwZ;cXzDsd@aW{n#BuZ(~2BF=CFfhCfMi?%Ot zGN53U9RJb>R0x$yk8~4ifmGge0cCUugacq{4mE3 z8ti;^p^GgaHeQ)-Jd<)3Gk1Lvkn~_P8h5GP!QQSp)0ui~o!vYaxYLBujmJ@IN{}vM zt41pEhy_^Y049GB!YSaAqu~s5hlpX_Yn;M4k+=M`6he2b> zpcSx=Utr+M%|8Cg`MV5F$0UG(%hpX@Iu z`kU2b7#iz56g3gfX||XoG#~T~Qls3Ek;-C96bn~Vg_?VTQllYRhdFWIzT$YbbI?+s9?;4la)+gqbAcdkeaaD07_ulS2<$tD0~ttjXzG7Y zknz|(YVfPe{0}rsYf)21fgP4yHmq(yM3hKW*us@S;$IKZpv18@&ItzbWD#9C5l{Fp zqc7u6g``>6P(rdnIBIPd8fbtpMNuMx;&Il97H*9^ro%7#6>T9vpCVdxU9xQ7dq3=7 z@Q*|zjc9Z#4g4N2PPgT<$r5-u#_8wpA!zNwHfw!-p0YLM$W3D`u`HMAbS?>YAz?W6`4;RKSF&u2@0NprjnC za(dj`zw2|?4PwBDlWHQ&Js~;m=FqLNh2%zHs&YzJl&%_TcK`hkE>85Hs~#vgMSOj0 zv@ivoY&xH;G~fUPzBT*<_jO@r=Y`FH|&UllZ18 z*BZwLQ!F;ww4HRSVznU)QveMLAVeOR?C4oET#4lYHG>bC*0)lKvnkPDf_z5e_*QG za!T`FiQ-Cc2_D6VrL=9Q=5Gi3z zN6c_3S{9yV;U1k$W0K0Phip+8hfi^*7JCD1MldO@Hrg9xc~g+J`Jy%j>ZgLTjRgk8 zKto;>5u+t(t))Fqd_$Jp5-ekntg1h4>9ptHI&N%&&6gjQntO;@dWEV1{hRMnLE$3L|9i$C=*{hBJ4S7RB9lo(m`XHCK=bOck3N0AA*JWQ+T zS1v9afmKImxi)S|VbzrcI)R3c;Hwo+2q6~{w;)TsCXZOMm?wnAQc3i6nSq<8`?+5U ze#|FnCEe1aK%yXbI;g$e3Kx@iQ ziCE^W3WKgxd(2{us_#;({VJPvPmA>VOMqrFc zJnRce>Q8C7zi<9~r~BThb>bX*3kkyJ4DIsFDFt>_D1i=;Is{-A5@?UuB013D^&~2#MyJ4k(Mi#g zPPHME&Re%N+$LoSR|ZzI2lgY%GO*qS8=x{_E1i6;xU@8g8Yn#j6B6g>^+tx`4o5CX zDCe<~B=Qh~D>FeLRT?rFhlPaSms@#m<1hOI^{_CKuyonbNIy(R2};6=9Fhrs=>+c~ zoCxQM)u09#WzH%JueF#Y)OgT*Q?+1L0^M2)1eca{Hb|4T z81S+(+b(nj>H?<03rG@2KSZM=v?!OAE#M0C2^67#71gXKMj!L6q}YfUnLH7J`G4|Cy3b#~GbkC6$X%GD z>@)WysMaG*H0vJ87ZR8uR$@DBWM$dSrCow&Gq|svXSK(sL%8I?F zU1+c^EG|xkYH%tubz8%V#0tf$Ja2pX;IfiQo?jF%cL>s=(5 ze_M-{AI&<7Jcy_wCEHri0%y~Oq>bfCjSGZ?Qq_7SSHNux#-EEVD->beR`5BKx2xF% zPrbr{fBfyzuO@ciEPuzGtIChtu&_`yIO1@1G~`hkX+c7RP)@11pqNcer$QMaYQBQ9 z>FRz#^(*)TEsJBXP@sLq{kHW;cmbd~odq!#(IZLR?hqiM6%|yfypE`m2F6e&p^CE& zo`on?3k~R4Re{D3g-CLWf?t7AAS(hZ1-UA|Ks4=n{*AMWb+-?wY4Z)B&>&}JrKh1H zLe7C9dquQaIk%)2b|xqm_%=|%pRt8&Ttx^biwvK_cFJJ!U5RKC)0$YE82F>_8CFv^ zu_~KL@uCeUXoYhV7zm&tU>A6hhHh^tp;W+aN2H4ARN7urGnW752R}B?UwyVL9{PfZ z7^*r6+EN*MkkzXmMMTUU!~*;=9@6lQu2h6}%>PKpaO}Al&VpL9_omykj1)6 zGkQT99gjUqqbH)Eq^pXMS7|c*ryDFc;s4(cto+1TOI|Ua6gVthP|m_Tl624t7hu(R zhcpz{hy-hh&PqOn3kggZF4Uel8X!joNZ%9WC=j~TjX>nYr@W0ILpDhC9V*f-qDjtE zaCkLs)ZrAPN{v^9iz6tdkhSi+d|%7VXTGTCgAo8CWh9&eZ$h-uk|^jqEj297Aj537 z4lxJ%i)yg8#1KALRfmA0a2k= zyG9%_%z4K}`2ZRd7Z3M);MO7L6t%(jx1{aO*f4 zCn{<$*|9(M0sl)6X4jIhHlS*DmRJ zFh5{ZR(YtoiXn8+C&E!L?dcip{=9$Je}~G$#>L!OiY!jH)+A9xY_$|;Ho ze%BIFQOeg!g*b6l44w>x|E^_QFMi{f=Nl!lr1nWWPi@Z*Cds9mg;e~P{v*SB^FF()U^B*xqY=N{{6ibW1 zBSXU-OBM$vBd2`{t7bV_pG(LoFtNvWlElz{nhvt0_<*mnL~qLtf@Qp+ZeP04_ikA^ z?alAMN9vZ&87&Di6oF8wtPv6*uLVQtqa1OOh*WIl1Q*B;UB-FS|4`4HRU~c73RW;A zJZ6aebzgnyp_l!$Cz>k4t(qm8mOjuWNbD4PE^rAM9`Pijh(J4uibOSo9P}9f!m6UI#2C-N8|28!Iu&E5o%BG9I1z72~%o_BO~|@nNEqnpOYxfT`ERG zmYxI48^ZLY5LPER_7Z;2EiY^lA3%-;Pk1JpY!4GT1Ai((5Pjb|-@T3B| z2wBZA0^+Sa_`)y$+FyI4ETrbb9+L}bjrrE+Zi-$~$oM3`dEe*)I_+4~-BdqQDCB zM1vwJ!M2+CYA`5N^rvy=&;QmdU;iKf>^ao5NKi__2_@ng5#ydLz$N-m3Gai^YQBKK zc1?$qkN|_K5m#IxS76=bF4sgB^{FNvLL*az2%JZ06|NU44i1wdHWUCA8x&EZ*Y(K} za=C}SuH-OEAcYeEAanR=B)J4Wz!f>FNwqj}K#5`o#|g+UV{e*u_gTBw$w#67oK2Iv z2KqXHpwO|YziVIJE~#msA+zh+?ZE-EFebr+BZb}`ijs%r!Bx_~dxwPDtS0~;iDCnz99fCs7* z2oaqdXRQVWgow_*C94NEb^;-yvu`q}If8-*bAS*rr;mLBLPUr1YCk*}sl7@oppX9a zUie2|5haj51l9K|wIy(iD7cj(XEu>D>{c(iz-}>B-oI-DP$OEqHqOIkqy~>j zpHD~_1SpX{kC89{9w8_Kk7(BLCCwV?BQ+7;1@I*TJR(44X@SSXL1k$o022m}&;TZj z<4{>Z?K3SGxvvUk$3h znmyRpA^M6apn0ILW)I2{xanAdK7hp{QCU_G6X?U}D-HCK)<7SEItHMR@r>%)O=DCO3CEjxpSxp4e8M zk;~lTe z?p}w|x(?Jw$DQujj?{|Isc8e<0>~q|ZSLfvfcn5Oj##LVdG#PqI_g56{49XC z(2yspK7e{MT&NEbi?KN75DR-UvAesta9i>G zlzYB?^G^fVlbxe8#;~}RhQ-3mQ=X_aLTu!ddB{ta>R&^Hij9z+L1m#H7sC2eRzCF5-aEhN@76D$ z=<3XIc$nmg;5_iXz4v_3|H+4?bi}HFtF#&J5=+Z#BE%B4I4X(^)uK#64HQiX z(b`YbC+VnSArjj4+KMJe4GDk8)+JNky5zn5r*q2!?niSy+>h}9*vJF2BOdl+uI(&d zW6uFdhyuVcVL#j$*bl%!jAR%H3Hvd-1e6J!#av@&07M}HFvbHH4LDmk?&-7wjs$QS zrD}UeX?)AVZ8%E^IFb_B!2S3x!I5-#;#lJPRQFUI;Vc0Uq{+bj*w)%~k6Xs!!sd3T z?IHIX_mcG7Ys%2l_AU1cC|=kG|7zh*$_|A?_j%HU~71g)Vxf2W&)eEW!_L5ptv%h6R3O z;FK8SL--8@k!21bKvFkjND(9muwLAKse?bf$DennIZ$h8OfgDg2C7oA+KM8S5TWit zQXVz*lI*D4lG4TUqzm^PM=ad5bQDRB*CQ%33CdH__Zj>RDkpBS#%&Ahu$q~Axf1ni zKI#6Z3}`16%YLYkME0f6#6vBwWy4f>Q`hG56(!EhJch( zg`(EsKlgm(rY|M;oTJ`NB%?&iYOBq$Z*tMGMwV(8P=__t5X3MN4+oJiii`3O_6w37 zA^n;ooFo=A>7wt&fe^7}@)RMiy7PG~fal+O_S^3Czw~1%c7M8v(-RtaV^zi~S6j{u z18;1%vIfq@+w3OGwnsEvSk%B9V~fd0t2o*Ps0&NtfLQr_7Du>7W1{D$V~c_V9C)x< z=&cqd4v1B}(n%Ky2*kP4X|bjki)kl`dkaH>SpSf56*P%e$}B7-Clzx=2?cVdwP;z= z@;s}OT9dbIugSWyg-rT~7OQP!E?KqPtShURCh`ov(N%RSPTo!AN3U(Ecpl!6ulh}C$mqI4t0GKCDvZ81pp2SLNY<}ra-tG5ZEqj2rwxWMAjue5iV9%?|shAcP zehe%}EmgPVAf$)lydqN#G2FN=@o3yCNzyHNvZ{q)rk4^7MvN>@Ah?z)15+$BWC>Rh za=J#ghaMV>y0R#^c+ovFmL`vi$Nk;D&JX$D-YiAYB-D!(P&CUVTM=}HPjt)Cb&!V? zyu%y=vq1ltw1_A`FV|A#B#gwhxYUAQTnMiIqJVe=6Ex4=6a$&L^ zwP7HljAgcVdOHDhR2jE}Kwl^pIR;%R=N2+_L)xOG1_6EK^Oz3*5?ZV zh{EtA8X9EBE5H5Gcl=3vznFmLfJPQiiOTHHk@CTAipKLL)V(pMX3=^qT@=0w^TgkHQC9`P zQ~PV?k=FVt2+58Ay!2n*a>&y!^Gn}RHK3T}K9!wHipeE7QQ%=DI~+`eh@EE+G9n(< z%tkd%co5Jqp|DClG(sRtjw(vu#K=FHXC9mGct2`_({k`8|Doguet8xe!zcv`tU&@Uty}6jDeA_#KQC;!yk3h06|b z-1r0@H1MRYbL+;w6w%&?G%*Hp_@11(yd>flmkHkLwCC1P9SDZKQXHKOJ1fT*9&Es^vd< zS-;b;JE!0DhH;_9-3AviERcwx1hYelog$7Z&lPlSu01Ys&t9jHs<8M@f4dwgln+WO_c{HL?V z{Zu~sw47oLf=GpyzARw`#2|ST(rrlz% zgTi4KlhdnCBf=i0NS(TkRCwNb$dd-dN0AnNZz6Fl*bxdWHMJm3iK~T)10NcD{=fON zKF;OC`yhXgK2dBa)o4)#qWI`OmA|sKbUV;>-`WHJe3gIK9RVkX;vSNG2iL$-$BpuDzh&Cb-t_AaD206A)%ZZ-_M1yqaL?zp*+IlGjcten z4a7-WbhF3Znr^`29xu^A9F7XC@3H9YB?5!fT@E3QfHxwSECkqK*jW^Sx=^9{fy6BT*t~1{Vf|S!7UGLDAU;MCP*7)EL8IIHi2!;{KBL4AL!(7r@m`$i=l#I;7 z(>e)9ENw0#5&749RugD|BQBs{8m;Cx+Jzp6I+O~*&d`uSeDcK#4Sb=9wc(?{2j8I{ zWjOq5)1u+2LQLW+(Rj$si;3XV0G1Lf=-!ANZk&>X=lkFL_Z{DS-5;t*1Qu!ugTPc^ zZAI`3LTk8!WTKcxrA=Z9FPrpe{n9B13Z*gyw&0FWyh1V~zjwk(ENO*=5>?lau5TSCYY12~iV@w)~e~{^uY2E#C^nn8I)sq10BkSOAyfG$PRg3t^RZ0J}qU zl{_4eVw9YlJeR*8D!m0j0|=TlHjQYIJpg0TS?pl0l4yma;2;IcMXgLWA)6O@{)88v z$_5Qk-A4{P-&_hfu&>6EY-0@z z6&C2gg=*8tH%bsVt}N6RNV#I6nqiU{QY35IEL2BVeAQsBB$qgBu%TPXrweKldc+v_ z7Xxig{*Tnz3~+QOlNB-!iiauONVPmz4=FcG@J3Oeip_MkpNBgk}eX z(Uxu}CP=D+rwDm9>_!pq`~UoVe|wSt;=VvIk9#fLo0&*e8f?=d%*BShm`j#5Ayr9? zrx+53qhH04EmnL#(p@10m@F2hgt74vD zYg@31tTa{{u)NHKSwX7Mx&eU>$*RBtxxk=^z5-PeB~j*LD~P+u0&jtg3pycN#h))> zxP%&^MHV~LHrm@hFmd4J&-uUD8MMXyp0XZ+HyQv0O;dv-BuEI_v~u7qFx)4dEXLZU zIxr|8f$}PoR38a73JC`U+@ZJ4ctPl)0-*Tf!s;q;M_B>}iF3*dtrbsd2bhzZNkmnW zLX7T5dL-j-%bsM@rNA=mMG5-j(!ODU#naX)uA$Vt6ErrH( z1qdv#)FW*i4zh3rzW=vnlWirEhdcPCiU#L2KGrjw%hi8r?y=6b@9BVY>Fb9UW&*`-pl|Iap$$6(U9w z^Aj_=1-D)r-IR=WFh0obLPIA7Ntr}CTp?>^s*>Q#g?KzIwU8QB0c8a!Qc2GTan~1p zDGMELCLg)EP$4?0dQCBGzpUiRD_`gfZOMm~*LUKV%PCyDLYILfK!lRgC z>1t4-d}kX}_4-#+oE!@BG9I4tg_}T5CLJzjQ7$O!|I@*X2K|Fmm8>4mj^;2CSZ(sd zLh&-Dd^{c263E2s)3z(ORQ0f9qErj>fItpx|K|_i_cv$$@Y$dtMbRMSdS-8{LcXfD zLQFHGY(A_YOfg3#S~Rm#B@9LquE<`4*mhYeE?~r&>lH$?)%(PlkfGb1 zk+dxVmspM=a(GfGp*l>d$^lzBrb%4UM=?u4(7-UHjMkm;a6#H3h_| z4O}P+bqt}Jf!%=+uf|kpq(IJKMoCg(3W~2f7%QpS@y4O+Mq+b#XMfyMTs0D>RAb6e!muR>oTy*>sWd{7AazJ1s)y2snnSi^*7djT!q3_D ze=PDhbDkHZCp4^RL6e%HgHpsQGa^9|^yma`sB?807ih77AT^;HC{mU5dPd@b5R8nB z9%*f$6>j)H{qtFi->`JGI!;Dfbv@MrYG|Gw=7yR&q^QF?$l9h&l`-{=rh`&eNUFp= zg*t)c0^3+rwpG*ll20*s$e4*tD!J~_evh5Zab+f|gJdzXRIJlVlBAI; z!WS;XZ*>KUs!>voPi0z&^(l!SfKI;B=t!Uai4)YyzFunMMe z1Y`}-s0spy0U;BOi8u(2EG|X?xkpWqE*6AVve4QNhUgNeJQ88M&!TW}=t-2SqKpWU zrBC{gK|RH(X`<70-@pTh^LK&nby9PT5x&qJ#y9Vct9|F4K2LfH>#d%u<;0PgC zv})vv);Qz}@CLd7_wWjp5~YwUK<(eqMKByp5%@;u`M~Pfz|?u57?7ir067>9K|*r? z!Xg0VNKFI;3F9K9#sh+c0Xf*0P4nOjQ@!&hcNt!lF9xgyLvxfz0@h*+gFJxRw`DP$ zA>O{#pbjoJ-P-u#YPfn(IjFEJ$QgD^xX=aQ5#`LL!I2xtL2{-`>3@A{1 zZ>nG zu>l7(Zt&LNh5okg^havpHS(Qyx_kN!O_|LtO~1k~kdDhg=WTN@Jv`9J?e>&&@?|do z8u?KOXr%R`ZF!s$xZG>Hr8xfT?)J~F>Rz|5x#zjmo$eJa<6+Mwv+H1MOz1SQHTJs2 z)+Z$7%0H*;0ga^U0*(CC1RCk#K&-++l=wi5oohg@L~us_uDaMQPRdj-vr``|O_{j7 z+_7%VqGBDO5w`|t-gBZ|fQVnbGK{RE5sr}yQ!o2ahb$n=Rb_OkE)6SLhg=|zQe}*0!KZQ#5lK-J$^=cH zx=WQus~v zov9vRU*J?`ju1pPyHyYDDK0i11T2#F0G2UZU~8n>Q%wXQ0>}-<(2%$ysrH4W9d^0! z4@#;y$VqO)KN62~8+Jj@T029qB6+};uzQ3mf<_&}(0Dr4qr4W-8kbZFaibe{L49{R zMHm`TQX~wG9PC1#@KlIxdadwO3`h|Gq?mXriqV4OaYdq(GDWMa zi~LO8CgLnRfdTAL(J~y_b+btpWCWL zqzc*5)Wwp61_Z?|sp#vVtNMJ^B1}jH;o%a<8~#a>I@k*Y3`)t8d7=@ckVz#G0z?(b-~E z?Mss0mDM(@T6Nm2j`l`n&Hc83H%U}_a!Ejm*vWEFqcms{UiE`P1SLZ7CKl|mrjtGH z_++JRYRP(_B!NU0E^m<0NmQ!IAUGZj8qtz(6xb#>tb%tL+iY0VR%n=UPn)NJM5g`e z(*HPf{-@R7L@o|07NruM2}ZAM zNh>1VvT6;FmsVEdVFSEfnn4WF=60^3M?G?ovTF_)s z5DD<0T=*mT+6~omI3A&5QmGiYN|Gqi7(SWHS#pHh2og2T3^FRHLIPxx6qffMZi$4r zNc_OLjsPzLG8k}{G!(G>GGYBm?h9-DTdyT1QrmkhxYRAkh zdri~?VTBM#h`kJ877xY1XfVb_iJ&?v$B&_G~j6QPsLwShKA_7qnU+iiE? z1?(v@xJG8KP4=|GJYdbS%QH5Ie445)k1E$>JQn=yu zHb9DKugRhquP0~LvxWEqz=$bNrt-HTg4o%43=#vkDc=7-cW(n`RdwEr@4e?>P6$os z9L|gbqMUO);AVs{&@rXCY24><7&iF9NCzb(jU$&Nl%{n|$*qr1ZasT*7&qe=P)TfU zDi{(+kYG|t+TNt%gnDV3rxFW||Kzq9Yg=l2>k%grjfwx??_FzuoS8Fd+TQ2?{O?ls zS)cEE*Sp^Ju6MobW1h(d@;=EtZ*(E+e!hz+C3~9D@<53+du~_!WXiHdI4V#;c_R<9X(;4sx~AgIG0mYUqeQnX8KwYJHHcVQ zgn>$}X!(k97v>3lQB>r4v-4AX%)_4zk7Q6bEA;UrzEC)`9pWTj#pd zUP~LR30k5wXckLmVpDYGQ_`@x1Rzj`!UUnpg_Vc(Fl|f%%tisE9)i%aND3=0G-_t! z%9(5Yw$slhXR8o+6C}1zClDzBp!Fhbaw0KADxyeOO4_0V0H8`H%PI22xk<;!A$n2? z9U-k&6d^_$fUW{)jwuEal4y8}s}WFCf+wGb*$$cUw@`au`Q0Z^Y>oD{BlaR>Rv7_O z^-DX2!eOJBCqWqm#c9m2nH?Yu4$&wo0D4N&nN)$6V3>rORWk`fH&`>JU?-TdH502q z!&74{&~E0t3W`GrP&GY453HS}O@?vDKg`{4-TvNCYCw)Q1bb6@9-}-Ro6on*`!|H}wu=M9x9`X!KZ|SZ z`|8b|>HqQlu#74X9QC0Bc$y)G*o2GuuweN6wwo0e(7&22aq+OCINtP>zPQ1I3@PQ z*>A6ISa#yQq1k?{TFIw5<|%0A*eSe(f!BH}d#jv<EE2GEQ# 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� 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ڗq}`wI%|G*Z4U0F4ADQ%m!;fTjHHWm#pCsgsWoR1< z0+Od$6PafiuRv!YEp!Yl0)edgp6Q+fv`0XjLoOA9n+TOe78uBi;@n!>U`-&^&n_rr-#t*(sO=p0*B z%ig6g!ArzcM6p_<-Vsa?kW|Cy4h#p*UTqMoxIF~DQ-~YL=}dNKMtkGPM}V72YPTZG z&_wZLtX^yqVe@xigWdm2+S|v+QJ(kSGvkq1t4^MMlNiei?2J}sB#c?T0E_Dc&F;#K z6@e|;kS)z8u>?tUXrBfQG;YrMd@?gT5@WFtY)q@9q(QbJn^yuM4bN%Xcx6FE$_asn zhST<(6ha!G)Aqp-LK702=X=dcBq!(dd7eL>u`JEpGjq@VdR^Cjz5MPK+8oPG!Su9A zY%)uJ3CQ*({5jhtv^Y|_>@4c5nucL2R)Q?pE6yDRa`*dI%7xb@db8;Sj_|0JAcH0z; z7f+&ps-wlqsrTn?)LsYtZgfyZbWpg}`;8z(3#E-y*?!be4??4bjYgwts0`wE(n(*b z(cNj3ZKXVwtFyKtfY(xdA_E3}v>r8pj?tnS2ZB^?c^37@oq{2Z-e*BmaHmj5HPOGJ zk)mK~p_0>RF;Ph^hNa{R+NW@v#FD7y`zBBQG&g~VojhZBuWDny&m%&6ic}H z$U;Q4D5GFd%1yl4<&Su?!l;XFU2PAPGf4y}gnmb9A zbc7%N#-HIY3~2pZ0Gv6bAW*z@jEWG_I_y@ya`Btx2;(Q@T}AotyMAe$^UL2|UmX%e zq9{H(QvwqzDWw7%)d;d78TyzCEh0yvQC(SalDeOp)1p)kTPjbd?ICFFD7H{aDq&8b z+)Tp?30k33oa8*~Gf(H#R6vAtrR|bg1B!}XjKc{r5K~{8c+?<(UQVGGj0V0(I;u%T1JT`P)lrGM<;z4x@F@oav3-@cRnX1FFljcV%Eni#Jx2(-gbur&G*_&?o8>hW zZM1vAIOMhGUinH#FU)r$s{9Cuyhs#?Dzi~p($g%$EU(1`Xw{E_b#cy23FJglh`}kTGj->5b zetp-gXK(%|IpT>H z6}0^6`i?8li*BypeBNsDM}BeW(7`A(|MltF@D>+`mEX=@jYg>V_U*Utd?7mbys#{Z z!&!bBwQoLLlhom>i}T?}T&d1*&tnJsFTB0@&lANLkDzb=+*+ixHEI6xyADLbvP?+4LkBaK(jWIj%# zpGz&DFsAFhr+IM4&D#cU=gHxxNST~3)@qj(>pNc9z2k-NKl1ON`~2A*f7=>S%4%v(Zsqr zG+W+~(My#+bsB+Et}R6RqLb9*y5?^U@>pgJb-J*ND_oHB+RUmT(In@&xXj4SpX>r5 zEZJp*!$z^@f1wL*ndpVX#|aqYR!fBdrcyELy(n@Rd~g;<3WbwP9cndd&@@O=IAqAB zNh?*GTv@fegonk~zCDECyDhXgnZ&pv)>%t=Z(F@MnXDM|YL&j%a=}gqlkRkQeR#7G zU7%XI`5ran8oP|J*S|nzb>SkHxKgrS|FUlI7A0XgP8c>0Vc;ZT_^l_}xh}OHSdrq* z4oOR*fuiB!rnPEPoRlKPbtvA@>T*PkI>lX~c*s>0Cqr?U4Ua&#nicG9e)`_mzqs!# zw(9kx5}!bIS|`F^Nf92v**a|!eoRCyL_dByCX4GCto?-zt+CD))%>;FF-_t+TuX~t zV-AiHN8hg#JQ7+*iN0MsU3){gt`c+MQA3`RSJs&~nL!@cGm+=k8Fc&^xh5AOk8)7* zv+v$>@$DO~_#^SCi4Ut)bskyE6Kw#R1__Xq5My4(Z^nY%iuwUFa@;Jl(ljlaT|{kul6RCsD`(E)#zaTLCup@eOOG$x z7Pd_LJ753VgO8p4+UMhU_yzh~UI+OSS<^>B;$`*B2G7?WoH;G4Nyu$dU9NAAG`y)+ zqWfL*eq7*A3#c|D>Tuf)m?nH8x$djUwVs zOXFZ|CX`WJuXn4cgtQ);Saq$I7}J##iMxXm=3QkKTO@5?ijpi^)PiddDfd^1u~baU zL2^*)_NFF%QA*|!bPKzadOio0$z@d~UkY)tvc1WOp?3E%h96Qzq}a)M44EJB6|WbY zrS9C%!h_Y1Rg!B8BbLx!-)#Cb;S5qjIHof>js#xuh6*DiQP#R~2rE{6rlF}j2)cuz zi-)si-ye7*6D}B!Xu$9#2^UKN!w6q9y$g3XEa#T8jczJyL!;m|YRN1UKk<$5)_+jn z|ChAZuN_F5^e~+zzur2e1v%nD*sJARS1#j?>d`{+5kpo{3AumMsK@OL;1sEF3Kx*9;fL!GgJ$` z_RaK~b3bZL0kIg>l#@9oJo-sCL<6A38?3s@)ZJSUrNm zafV0HT2#CqaCggUM15T7E z_Uax#8*aKau~mfus!Kq^G8Tv_Pur8U74_MG0jQojTpS5O+|$10XVjTSEj0Ay!iZfC ztqo^`fmz=cXNA3HAs^n3KVk6l#J`X1{PGvpI^`5$#4IvQ$jF7+ zyR%Tz6iZG}a?m4cT)22r;9ihNhnz~*-=X{V=rJG@tELP9%=*9Oom1iAL8#9LAqJKV zK>WWUY#0Jli6dbsBcx=MU08H2Ot+o&Q$3YY0M3^LFDRp7(-=f;9kGPR899#z z4l-9HFU7<)g!OHxm^3Wj1vnN!%6SBm!N`^QN6b3}*28O@)zGY?gb+upU@|EEMTt-W zr-C(C`+-nE-WQoiHXfG_OIHb!9W}%&Lx4Xl3Zn{<46>{wFguUo+vi^Qs#xrdtY=KSeV$b6eFV<2Un8=<+ zu>mN9aGu)c(P2r|2=`Ie%{UP!%3)Ui6IEdacKghzZtbnG*aRV_nw`yty-_yEM|#AX zGJ(y&A;bV!T91f;n9__UhQh}aGoexv{UM-A3&hw&>7s(#sR=(~aF5X*CJwtISr}2D zY97FP8W)!K(d%t!=rk~yCh6AF;*CBgZ{@J6ICw-Wg*=fLLXD_82ea-7grrxLebZ!@ zx4lg+3Ly>Fy)#@jA;{B_)Em#1`)z3~+?PAb|H=CI%m3u;d(W3FID~Bwn!=hiqDxsp zGXs)-mn@ZG`WQLeAYz{0uwC&;NeDn{14&dMm0CxW$pZWgLkZtMe65+ai(Y!;U`}IT z3hO-(3I;QJ=-6p1WN0KnLobCCh_NKqfWE-+@kXGYF*X^PtD23ag_>5$SUyyf1_0X( zck;0h8U!4>vSqKry{4YmBx_SLdq#eEA^JD4mm4>SgJ>cy zs3=v!?+uXUlWKp^puzb`=Q=Xu;#tKzN{G0Tso5HH*v&>)R`#Y!eeD-mS4T|dL~>!t zG%ma(rw!poMaw;N_vS-5wGF0>VgHf5Dhl4s+9?!-9ml_ek}frx=%uggovVh=$g*_b z-KzPyj&igqI)Z7%wePp8slvdiq3>*?DS+6;WdibqQ+Xm#zU&0O{$f7r)~rTGMFkG= ziA4O?EVm0Hh~1>nE1H{pbR@hWYu`=`q5r;Z$>?3^HAg$%+#pBMUNcSn(W5ZndnR?{>Se7MY?o$`S0mIIe_;(P=c&6LPC7t zAmXEm3AMubR43FDQxeSz6h!Z3jQBi$kIJx6eAk;{b%6{ApsfvxZ~|9&kRUe5qhqCN zM2ZsH%1SJis7%~Sl-^sCi6(j=zGho)SQvnddrpwoKA;g_0X0g=XjaA<@&w#@2|!|y z%Y>it24yj0QG!4T8vCAj`U`P$;RHnHF+iE+CS=)(Z~)|$WCAX&dm|3in<+u#qKbm) z2oZ=__qa?DNa%iq+|;U5N8dUIV2?Tk^rWGuMl~mgr860pw9hhge5&N*{i$R+QmgY} zJ{&@U%SX8J^bK$R_R3lNq+D@S6~8j0R2;Tisoi8HK)jU+Y5TaIB}&EG1_B552$rFu ziKi$m86fHlLz70jaILr%`ndb5;8nwE>O<*bi8nn{r|6@CVuie(qc}|Y6M?$gI}e3# z5|lDeOhh=KF43Y&de&#nm|}n;A!r4$Kd4b@Z?^FY%H<6%G%eI6({6^tY?CYt`JyEw z{wUk+eap7$S*$`Jc3NsJnhJ9fMm&sEIphdeLgw1fIIKKEQ>P4>6*mp(6YE4WFjr@h zAFfwDBeZnhR=_n#qN6o1zv&`)c5FI-Fa26|{ zV^c*<=q!>4s}Lril|(E^;jKpxk^##GhUO{b?7tnk>dv!UpCMN{VEV2ZGDV=g3gQII z32jst0Q{Odnh&kOIGjnapmC_L>fMrcZ}8m<32%L#uWc;*#&Sj4R&;)0GN>eKVVAEK zFi9(?!*&KU*xm?J3aU<@DW6WD3TG*TFk-1C0bWKm37eNQ0jJSaK5ds4Q;jGWz94n#9zBZcT?`R@HMVQw>-%mMm!-S;faJVb=42 zp|N0ERC;yDTUcUSpOO(^+rf^38e$4ol|v@X@%admrZ?z9A{MAEbQ(uw3;_{?kOG6E z^m)v`fu_KqgNQhyjvTXtc?cb_GZS_K3=?V!{N}~4fAYSwSFaE9g0&Z;&7w!iMe_Sf zJg@ndvv>TFIy;{Wi?m7)ZjK#B@LrJ;i%8~WUp zU=GU?s+rV}0b-kFE-Iy)^4c}xLg(N%utDMvS#}Np09gw+k=2)v3(|cta+R&>R@Etl zO75rs@csAyt^VJ>N5$kA4H+}o_MnHcb28qxcxSNJ!$FrOQ5+~Ie`#EyE=t7A1GFd< zxh6uoD`B%j)^U~Pcx{Ksy|?Bc;XQIeM0C2o_}%<2ZyJR~pIR!XkY zx52|xm+`7G+IdyMPf9o8B5+v92#mxVvRx+dfq=Q=rWxf?hLIj-04>j-qwqO{Wh9+n z4U>o4q}4=Z$_Ku$F}>+rpI2ZJ%Z4(=gkv*2!>`~eBAE)B7SuiYc5@V=X;fu;m`Q&U zdniL$-iL)M73wYnnZp~IQ5Yd<*DE4yLatp;|Hieiz321a$xA!Rft*q=rYMhcAt>{- zS#xhC@P>S-M|i2kelf69dBqylp%MX@J8nAHoW;Wr*2wTkSFF(u+x#Qx#ZgmDA-W)1 zn~Jej_o|hg?(a2|?LnczRy>06seIl7{kLNmm9Tu+UnbnNT1Ej=@@0M9?Qe3&)Lw!= zjY_mj_w>fCR-b%Zw?Y#T%_ zTlb^1d9M?w^=>vZDRJB(%2t8EltTej;()$v)O zs(3)!M)dIjinjpq0(qJyK3=k_*eS6$3fLr_tI@PX+$vTSGO+gMjcfdaY1N`najF^F zpVP_+$`L~{8Es3XqKtbe&@QkUJ5at}-MRQ1|9Su0&j0y2aZlip#|Xy9CA2l=+#p)o z+f;HlmUn=GBt4230yCD(Sn=Ogpd;2ZBP;7 z>n&wP5n7-zRq|k}Gntr&Cf+DYnJ(x{cz6oIUmd6yFVH>ke1;$+v6QastA0gMKsC#& zqcnS}uvyt_Q4<@83aAETN}Y@BO(oaMFWa7eSLDd-noe3;GLa_oZ&;^Z5GEx;kW)HY zSEdhGc9&m$ck;8&nC>XB9XJM!tyN31T83vJOS245D2{5}C z1f8{4#}h`B@;U!ulXV^WLlOK4Rv73sdbdARXjj6JP@6FNG$ps7fx4 z5*kK;a#wwqAb59lkWcy=&|f+XPiGL(8VryU6gt`Nos&#t+LwW5!$}4Ol!QX(ewzBr zhptRq@yQk)Vk99nA;*NLk$PA`Gch5|iJ7=s^mFYZ7E_{)Uit|{UVTs~{U`%vY1B1{$W2gN16gwCA_Xl)V-bvtLZwzv zq@ms{IIzqals()WG5a3VippmmDNj@uowNy1aTo{()t@Lj{i z3o{;JI&Qd|K;0}lb*FHHagWcI3s7MvArT#EP3iS7O}QyHpfd(T(+B-+q}HwAcv>tScVcz zz$teXW0^O-O}Xgpt?xk>B;EDwNTW4CO+_$@UzDfiySy16)E?Gcf*#l(``1@8KRf%> zpRL`2B(vl%?8jF{kNF0VQpt9nWsMW5nh6UU4NK}?o!7?0{$(q1&GMq@L z$)MmAs=!)?cQp#0mqw&?PHY`Qf@eUo8bP8|lLXf(B`LB`o?*;YsE+VI!pNPR)Ius4 zQT18QIZ!dlfI#Y`JTAkY!)w)&g$qUIJ_x5J`3?VwZADUU3YkmDq~TfVKd)D%>FL2T z;&wpQkXR_NT^(e_lTSWsP~9coDWTi(`jJwU`bfzZ zm6i-_@hIV38Z*ZtARZMwteQDyi)!%+2$jhr3`U+bb8#hVYAT1+%0%juYuKfuoM}zH zS#P8g0d_oHWq`tPnR!fQ1`fey%u^X{v3CjL;%sebkJnWW=hmdQMS_ z7}$InAxY^i9(l+|D$kZk^m-P~TvP%7> zekF-`)s&b2?#qp&OI-f)435q+Ze+ID4t2MXK+wyZpz!hl&*fMQ z@VU65;BOAf zBQEl20+bjz-9)=-0iRWl5OSwjE=^f_=(&UY&UyOAxDmPI#W_$bnbrn{CD(+>Z&}Q- zPYj(Qv6vc!Gj0U=D9tEMrIbeHNf|#bSIl?C*Q#h^S(eV84VJjgp} zy>YFQGkTE5q-%Hxc1MiqddVn|Pcz1oM~l0{=ka)WXz{!evpLitLC?gwFf>?A@p=jc zKYyK8=J8uhqS!z}#uP}o+8w08%=;{KPlp-%hT&(1Saj%42OJSsDv743@tXD)UqGjcd)XrmK zAfWqF6_0#nKLiQqgpl!Rd5BhvXH6O9O{~zJlMI;=Dt8p`QCMWF7wBmjOj%h9P#0t) znTxErIIjsJjZ~K-uKwCNYxSr@9$+OXbgCqeFbvU3NH20jhPWh=Cz(0OKgvVD`}5*| zJiC1t>2g#k9{UOjsTN^-5WOnxqp-wB&#fUikX1lV1q-Q(0|7IhOf)5;Tb#X5OO&Fx z{?LZF*WOmo3T)_jn1ga#>&tQNpoK^Bl{jSeD2uZ2IHXP0=NfMNNP3^DY^ zaz0gOWhE4cmvOrjx{huvBBSIc?EZWoO6$0RFt506Xh~V{k}(}GO$)yaq>fTBR@jOR z3Od$?rr|yVUCuFvL(l3+yOZ^88~F@0Q=6nR(x@fnW0(DG>BDFL^NaEphs!%o#DElT zLGxhGLl$+(UDiIxfQULAvVhSQY(PRC6OzKf;G`4BmXz-CqZzddRmOonk9`cu0ZQ90 zotI+G<};dH&l1ZE+b4?Hkk=#+YA55;%SKwrIoh(QNw#s%gHr3~D#C60#G{2^5MOw= zE$R@Fgs`Eg1(Qr78E9k&bw|0wGdU@s%r#PB!(uu>HV+UPs3k|BC=CUY8;Fn-f8V5f zD!J-*{6PGRdlcG~Ucg(xODKP}@0UN?`1kKve*%Bvk~D=$r^%7#NdidH4y?&hD$tW% zI^T2R5l!3iDV|0E^QJ>zN-st-P_gB;@45FEc z&LJx~xW$l>0)#O=i})SJ1DI*6coDCS``A!hhsQ8OwJkZ&r=5<+=0 z+$c0@?T{fM{G@e=p^H9}3qIk-Q$J97RqCb%GFr5=S6uz+uOc@70O)U z6{doey(DFf=LW;0aH;$shPy7)YzC*|-i@2B+cL0Wn`=kH`Es3mch6(hK64~J&h zok$gX+iSH=$-~2RkjYkYrV_EZvd|}?>^GAOsxgz)W{MQdZw%IN&PQs)GJ1jGN)mAb zw%;6h+R+XK6z_5q--N-jDq_P(uk7XtB@jGuP}&3J2rPuU_bzKynT|3+Hf*!uQ|Rtl z_9Z|V+{MZ}FzQ<5jhveUmaAYJUU3$AuaV9z8%ONx!%J_dgEXd|A~G3Gj_McO@Dvuo zdOGT_B?>);Uq6|ih53Pl4&yfW~ZddkL7zIV=Gi>A?NXu|f4+T})J+(ykw~gtx*t-4E$?OS4B@Q(1MY z1aXXmSkE@QL&O$Vsy zU18R`sSx_-BsVq%MGK`dW(;!bz~q-1GdB4Q6)hKyWDA*9N(v@?Ht}L%MOdp9A~}`A ze6%%a2btW4$J&13a1Jewe&V$+rO*E#`Y-=U9WIpwFEA|s7-KRC1!W zCCoOBDfdVcShX2oFw1C*(0t{v#2U@Q46+9BeTir$e1`EpU7U1l^TTd(UMDgK%>Qk+ zxtO*wX|FUMR*1+cbRJT!4~O4PxO`{HXnQ6!>!59fDqXm04EUcg>ejN0db|h(U%=oo zybjmfLZ!;VNOti^z1z<|Ra6|M=)}Gd;oy=|AFiLN9R@hv0C;G`EgYl9r&VU$&`KRZ z9(Q#gU@7N5>Ee6f4dn}Xauw=z-OiNk#JL1oI5^#FNk4v|^k?G_b^hITH$U*=XJ5Z=>CVpg2o!Yo z=XU3NE|im>+1I?MUrt_GJL!65fRy)vq5h`TI!V77T=V{mUVPxyfysxe0H&V@nEFo^ z1Tg*KS3fuT5D?wR&+C7v`zLou(h)G!7r^R%5is@FqHFhbzB<+a7uN|Wv?&nkQv#uG z3UK<=(|}wrT?`KVlt8FIAZgd#bsaF#*Y$lrF8%`#?f>x?uWNy+zw*Eo^|(fm(@TGL z<3llodVKPV4eZup1w>|f2mXlWi zOuy)j>;RbE6yMrIMXq`4Y<~>ez2`^^1pb=d)*0nK@nPWLvr?C(4?p+nXJa_{C29p6 zd|Vf5klypTpIjT)Woi$d^1%D3%TG>%*!@OTVASR8@2Yglp3k=c;Rjwj24?r)Tt~G) z*;P`Xb{p8*mNty!yzW>!@0}oyMJW19bK~ayBvY&fs>P-QKe^t%|9{zz> z_jC3dUBekL>TxH%x*r_%SEO&`Z2T4JoHyb#>76&O{p{Dq*LvrT&+n2mpF#E6UEc@b z-ly1~EeU$}oSaPwdiUHz*SsOX@YD_T?k`>!-}GS z1Hk^cw>aDXDXGx4ROq??@DsY|UP+pwW|H(wKRvYPxi=bJBz2zQB>kzW4|o30Yd+d| zcIhYA_JK}5@R}(w>eUCHUO)Tl9>KQ1_?jQPawe5|w)(S^CF%fj|Ggw#!q9rvzIV@s zuiXn!|DDh6=?C~;POj_+EB?mks<#~j1^%IHSFX9T|NN7042*s0nkz3l{{c?6U$dw0 zr=YD*y;Sw^?-@DkTuY+@{}WjCT_3mTnLQxE?_xk* z>%aGn2HPjl9iYU2?lr*fuQ>xYJed6S%hg}~^z<9I4xL@PevL|8GS$Qv7$_G|1Xh`32C_)h_E9 z*ZP5fe8d3A{NhyNN^|+nd^Wu+xY^aO1w$cIpGvz|1vj}B^O})?-6!*1Q8Sh5nM!{y zhElgu|CF9|uQt2BfWt%2W2N+qBIYz^Tt19$Tw< zV5F|L20@Wuj?vVO5mR8~sd>E#4x~VeUvyYt1;*6aiKBB=|5sq@r~NrS?QBoYy_B74 zwxHzAcT}d|TXpm2<=3h|?e3nO8ZRH+UAfcu?~>Y^C7{&raIFW-XY&vH``zu$n@(!2 z9*lQ))=DU1364qq@0R1fVGnDO@>jt*Z_A+W0`|jp^m>0j(F_-BMJ=iXu)m; z3Cuh|I{^yw^hnCHgnFj6bRv@uk9SAWdAHHwG_Y@r*XiO!I@|g3kkd|B74I92OIpJTRQ$DA?vyFu0Yl z1fdVeXuTR%u)&Hk7Mb%Y&B7}VhuB8BV*4QDfSOH!dee9&D%T9XS0xy(Hdv}!n0Qa) zkU$oTON+pDQ%~`Lbky^wG;u7%BGrBBZF5d;*%q0WW6G1ydc{eUR64Z;U@j^Dr zV*e62sO|um@O0JdTPEXWI~}s>O)Xpk=#%TvkQB)FHn`r&wCk~V4W2~)g#h%ShR5F} z#HXlns(}(I!Q;M?tZTN%53a28@~l=@vs5zb0S`u^_o#KMOK&2G~@m&D-G? ztOx}ft0DZbSmRW3^Y-i4{>vXU{_%Ui6^|E;fMK!Ia3(fCvEM^0REkK5+;g9WJW%nhtGAY0-T*6dBvGX=`9s|Sq1<(aAjzC zH_s$e$px*Rp6dX9f;YU>9jR{_r-`RS$}QsJW`oU`YF1O#ma{nkYV_YyeZ;2!x*jKh zE!B`71+P)F>N=7A#NUqrnA8uFb&bVklZ6}6bCKgN@z2X1#_hC0|IH5~idVf(U$18$ zx7mg&8L+$pq6!#hU|PaSiP&Y@>3ByEN&MPxHN3YOmY9DhjCzL*3qL`j=y+6Kt?u*d zXk)fMIa^Ky_EEa7uA-<89h)(=anWnTZ*>;itUZYi!V&FSg3e<>N7os8x~kkGeHR9{ zIDiR&fl|FkFh%jsPlu*&`}!hbImYAmq&WTfrBh-7RxZ4^4WIAJ(5BwkRv+%CvC;_=T|ZFngeZ3Od%a ztLF)xO2l2*HkutX#`4W<8l0xM1ADbeV3f-MnXz$t2{@Y5@f~w^^%8mo3#Vv00R)A9pQ=h6BnfpjQ@H9khROESeNVffAFjFX-|w z?XMei2JV?g2%J`w^|KI$$;NcUw1JBCJN--g=|=RYLs=n=#ia;e<`ouWS_BY5x z+310EJ#6Au!KQP7KRgDqDvGDDDU*>w5>Licpq)(09tZR&2qsMzN|SHSmJhSd0? zz)}cs2<%c$puPzGYpZ9Q*h%~$A6iIQ^in(_@qb_)hzB>m_kw{A03V7ArlhY_XF|qQ zdIeY1^kXt3D@=tjO|P`%oi~{%-ZpXkggyp$JZcb%+r{fWpM;{!3xXFHEEDb zqwEFvB^BC$wee+QFXuKg??hXdB@|%Q(^k!#x|H-;W>31OY&;(|<6#DiY zwW#fQi-LGq0YC?&q2$xPZVS`v)*}+06_(Y?ibJ7bydjbGJ9JBfA zSmvQW>UjFnHI1Q{V6&CMdaBZco*Ql6ic^8iKc%|NDOVZo8Oy?zo=Pof*f3SOWF|ZX z?kRB@N{WZ+iWMq2m~?tH1{}OhGeWUBgp)RV<24AEOA&m!j;EwdML?v~)i4D{d73di zm8^*uatQ0KYfS789DAKaXu7phf=j^3xy|4;3AthGBzJL}@ z#<-qKw1ST!$AMx)a4>*Y@y9|qM82RMq&uYjX(^E@D2jt;aBLbHCBnj`(5|SJ>kPS2 zhFy^3XN6XkHV+gm-Jz(j6+AyDBj8C?)Voxd&Ebf#7I@D#QL#&4nc9&4V5I7U^~{Rl zOJAWRHwyt##VVi}5TV!J_`Ua!w|()j6pLevyYFat+cWux=U;Mur!q0Q_3Dwd^(VE9 znt!@=i@Up2?Hb#0PuH!+OU`ZC7b~Ah9Reu)nNsGlv8m{`XI@HwbLS6VawfNqe+3lm zbN!2s{Ap!#d~5Qh52d#E{Kz@)Sh@M#3p3-t$GwFZMBR8#c-sr5o8NJR)Af>jGBZAu zHZOE9I(%V%uG+hD+fw?O?pxeP{h#EG@voGc>AL_#8_rhy?#$ozLa;Ba|54AQ{<}uT z8=0$uPkuN33CDPDYV{}6!8iTwi{Et4kM7H_e)O3<5b#SA-IINHzIU+xk<^*sBgIGk z2QOIo^Me40Pxb#_!O0^Zcy{$x`$gc>wjZh;ePPSiEoZi*uR5OH_E>b%pT5)mrgin~ zXKLH4=LYwEefkl9XW#DXxmO)sIC*3&ye)rxBt3BJ;PdIPJCFGHnNL+SS1pw7$*a$+ zK7Rbxe*YufdFS+&2*~g7L*)5;{$sR4@k8eLBSTBKo=dxK{;vOZ=h@Z$=Uz3?BUtJ$ z`NP-FN)ydpbmWeS`@TN*>}vMe@Y!?E1d~^tSDZU}=#KRGXEObd9)9j?kNVq>hXa73``?9dPv-CJq4lP@`S@%8 z?C#*f^i@`-nqJ6rXTq%iVU{N98S$?>KD%Qwzj-nJr*5~r^Z1M5L2jY{{ak+Gao=JJj{c08Z9x}HyydSBmD&!7AJ$)ev~ zok)W|Zxk6He&+Y1@u}4h8_%D7B(-XP(@B3bFCg=`Udua`Rc`e?bMi&1H#O1y+u7=l zrAM!&oGXU`-|zWe_-tpxdhX<4t4W59{)g}Q?$O6eQ>*!v^EaOfh8DXI8Yh2Bi}W{- z{`UA^7hk?uyW-Nfw??^#v^8=0E*QoV+#CQbe8rtguaj_V&HY~IVKq61c;HNQKao8F z$nu~|XyIf%J67zfu!Rj+u`o@aXDTCE=3u&_n7H2!YXsTblZazQ$LJ-^$2tQ8tWwllHVd%_0avG!u@@CRczOZKvn_emYL>)7$JRip8rJFXRjuLQZiP(k%f}a&5RRK%qxnX2&$3DUk$YKx z>JjFgjR??elY~tIvARUIwmyyYY`Q*DH@>%dB(GkO$%-eiHMH>*El#@>d*_A$SFWNo zri)}1a9+bWoL-Co^>qv_jEr3*Ve;U0yZGK-lQh* zAB&a|HCPbAfJS`WpXUgJ#F(K31p?YvqkS$d#BGTqCNJH|p##SgiIU0Ur*N#1R_HJ> zNYTvjVH@MyIL1i;)yjZWVcC0qYjj0k-}6zmHQ5*t?1vL@g?3#Q_^}OBad1l1P5kFH zmf4Og>9#5&kUS%{Rx#F!8UU30L@(BDJm=zdICWdVgDn{Xw=JHDvW{l~&U{)($VvtK zx-8dAtPf2XJbV&lZDc7fq(A~lwV)SlC9)7w0(Lh+6A+7%IzBV;er~Z|z!t%V$ibLt zi!_A86yIriqa&d*$YrRDDgY@hFJO?!Q(UvIM;*Z1G=`YfCxzwXIFd>D1;0UYP%b2V zSzF?^l9S4c2xsfuz>XhF0+J`qg(0xS!>@kj$tybbH=AqCiEe-fjg<~It%hyXl^>B* zGzc163(BM82ZAHsfbK_h79XkbX@(rDe2sUQ}t~xzhLW_#!?-S4+c$YUDtAn zEu{hhJ|P1PuVgo~&;j}-Ae?;KM_9s9GN-ah5ddbig7~{KJUpUgS!iUDf4N||IMUL< zAtx?=`OW*@dsAoZA*3kYV?4+NK9W6riDex2`;KB{%OB3@{h?Xwj2>_X+NxVh?&JVa ziSq;J%@2A!RxaSM*K5a5-7PE`D=NB&D2UR#XpCY^<@1)=<-<>x7L)Pli>4LR) z-eFha`e0@EWM~|`$|&8>2D-M=eSB#u>JD~Hb<1`S-I)M8R0TCmF+1KJbO)P(0V5QP~v?L7Vq6sf*hRwz4#owbc z1J%!`i+8(L!#dm_Mq&SaXK-wMpfft=);Dcu33+tjJl61qXVJ>R9Ua)Fo|wDz*@9iLgK`I`k8?p;%?EfYox8O#cN2Bk7p3RYD^}@1u+7%2(ZziE z@KhL<@6DIn4qg?_y!_gm-~0Qso7Z9Za&yS!^PA_*0IC7=f;<9>cuBX=>Y$TNshtK2 zxXeOoVWb}%O+iuY#mNaA@F|v>=)dqkRZ-%lC$Ok88+(x%bXL~UEtSX&r{@*WXFY+u z7A!;-fi0BDW~{<#^oAWqukQ5)tUba!nls!EK`~OaB!-KZg2Ma z8heqUNw6o;ENR7B_*L7_Mkfgf2{TPQ4O8q6MVW*D3)brHumiblY@Ge$sWlQBmD|d5o99#W@Mf0Dh=24#AzNKS8P^$I(ho~a0x*hZvLtr$X_?RV zbfN396Jh@xQdx<|`I)eqBaqIBkQ|hM2qnXnBDz%kQY@TZ0e1vbvPe%N32MzG*!_`1 zC+;XA9f~Fuu>iYw!)yR@DG4>rpPiI7CyF=`1(#6r(2+1NgFa+qofAQu?Okd&$|2yB zWyVM6LY9u~TSg3vMG4bB!G?&k;XR^6IYl+K=0`e`-M=%@B{usv z;DW*zT6!GmO4Vg02}^ex==ma83SLqAWKVj<^fY2wLZ&L395+3Cv=KCpQb@W|!@Fc% zkAv2^3X@H~)sfnf+(K~89C);W0^y0!0 zohe-jTS*m61jkfif1|8g(aaTp{^|p#&;IcGwVrhP9`?6=CMC$-!O4-Ky *XdN^X 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

^sSJT-D&j!;30%3rxuKWnqw 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

%X^8O}IlkF5cA@qG5+l(OAj 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%0AivN=?6tTX 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 -source -divide_by -duty_cycle 50.00 -# a name assigned to the generate clock to be used in TQ analysis -# the reference to your master clock -# in your case this is the lpm_counter port where you pick the generated clock from -# create_generated_clock -name divclk_16mhz -divide_by 2 {lpm_counter0:Clock/2|lpm_counter:LPM_COUNTER_component|dffs[0]} -#set all_enabled_registers ] -#set clock_enable_divide_by_n 4 -#set_multicycle_path -setup $clock_enable_divide_by_n -from $all_enabled_registers -to $all_enabled_registers -#set_multicycle_path -hold -from $all_enabled_registers -to $all_enabled_registers - -#create_generated_clock -name {CK96M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 192 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] -#create_generated_clock -name {CK64M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 128 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[1]}] -#create_generated_clock -name {CK32M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 64 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[2]}] -#create_generated_clock -name {CK16M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 32 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[3]}] -#create_generated_clock -name {CK8M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 16 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[4]}] -#create_generated_clock -name {CK4M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 8 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[5]}] -#create_generated_clock -name {CK2M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 4 -divide_by 100 \ -# -master_clock {FPGA_CLK3_50} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[6]}] -# -#create_generated_clock -name {CK56M75} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 591146 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] -#create_generated_clock -name {CK28M375} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 295573 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[1]}] -#create_generated_clock -name {CK14M1875} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 147786 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[2]}] -#create_generated_clock -name {CK7M09375} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 73893 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[3]}] -#create_generated_clock -name {CK3M546875} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 36947 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN02|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[4]}] -# -#create_generated_clock -name {CK85M86} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 894375 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] -#create_generated_clock -name {CK65M} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 67708 -divide_by 100000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[1]}] -#create_generated_clock -name {CK25M175} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 26224 -divide_by 100000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[2]}] -#create_generated_clock -name {CK17M734475} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 184734 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[3]}] -#create_generated_clock -name {CK8M867237} \ -# -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] \ -# -duty_cycle 50/1 -multiply_by 92367 -divide_by 1000000 \ -# -master_clock {CK96M} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN03|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[4]}] -# - -# {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN01|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -#create_generated_clock -name {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]}] -duty_cycle 50/1 -multiply_by 1 -divide_by 8 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] -#create_generated_clock -name {clk_2M} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -duty_cycle 50/1 -multiply_by 1 -divide_by 224 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} [get_registers {emu:emu|sharpmz:sharp_mz|clkgen:CLKGEN0|CK2Mi}] -#create_generated_clock -name {clk_15611} -source [get_pins {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -duty_cycle 50/1 -multiply_by 1 -divide_by 28698 -master_clock {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} [get_registers {emu:emu|sharpmz:sharp_mz|clkgen:CLKGEN0|CK15611i}] - - -#************************************************************** -# Set Clock Latency -#************************************************************** - - - -#************************************************************** -# Set Clock Uncertainty -#************************************************************** - -derive_clock_uncertainty - - -#************************************************************** -# Set Input Delay -#************************************************************** - - - -#************************************************************** -# Set Output Delay -#************************************************************** - - - -#************************************************************** -# Set Clock Groups -#************************************************************** - -#set_clock_groups -asynchronous -group [get_clocks { *|pll|pll_inst|altera_pll_i|general[*].gpll~PLL_OUTPUT_COUNTER|divclk}] -group [get_clocks {emu|sharp_mz|CLKGEN0|PLLMAIN|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -group [get_clocks { }] - -#************************************************************** -# Set False Path -#************************************************************** - -set_false_path -from [get_ports {KEY*}] -set_false_path -from [get_ports {BTN_*}] -set_false_path -to [get_ports {LED_*}] -set_false_path -to [get_ports {VGA_*}] -set_false_path -to [get_ports {AUDIO_SPDIF}] -set_false_path -to [get_ports {AUDIO_L}] -set_false_path -to [get_ports {AUDIO_R}] - - -#************************************************************** -# Set Multicycle Path -#************************************************************** - - - -#************************************************************** -# Set Maximum Delay -#************************************************************** - - - -#************************************************************** -# Set Minimum Delay -#************************************************************** - - - -#************************************************************** -# Set Input Transition -#************************************************************** - diff --git a/sharpmz-lite.srf b/sharpmz-lite.srf deleted file mode 100644 index 96a7c6e..0000000 --- a/sharpmz-lite.srf +++ /dev/null @@ -1,17 +0,0 @@ -{ "" "" "" "Port \"extclk\" on the entity instantiation of \"cyclonev_pll\" is connected to a signal of width 1. The formal width of the signal in the module is 2. The extra bits will be left dangling without any fan-out logic." { } { } 0 12030 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored filter at sys_top.sdc(15): vip\|output_inst\|vid_clk could not be matched with a net" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored create_generated_clock at sys_top.sdc(14): Argument is an empty collection" { } { } 0 332049 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored filter at sys_top.sdc(32): VID_CLK could not be matched with a clock" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at sys_top.v(209): object \"vip_newcfg\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at sys_top.v(594): object \"VSET\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|T80s:T80s\|T80:u0\|T80_Reg:Regs\|RegsH_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|T80s:T80s\|T80:u0\|T80_Reg:Regs\|RegsL_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "LOCKED port on the PLL is not properly connected on instance \"emu:emu\|pll:pll\|pll_0002:pll_inst\|altera_pll:altera_pll_i\|general\[0\].gpll\". The LOCKED port on the PLL should be connected when the FBOUTCLK port is connected. Although it is unnecessary to connect the LOCKED signal, any logic driven off of an output clock of the PLL will not know when the PLL is locked and ready." { } { } 0 21300 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored filter at sys_top.sdc(17): vip\|output_inst\|vid_clk could not be matched with a net" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored create_generated_clock at sys_top.sdc(16): Argument is an empty collection" { } { } 0 332049 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Ignored filter at sys_top.sdc(37): VID_CLK could not be matched with a clock" { } { } 0 332174 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details" { } { } 0 15714 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "altera_pll.v" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "altera_cyclonev_pll.v" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "altera_pll_reconfig_core.v" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} -{ "" "" "" "RST port on the PLL is not properly connected" { } { } 0 9999 "" 0 0 "Design Software" 0 -1 0 ""} diff --git a/sharpmz-lite_assignment_defaults.qdf b/sharpmz-lite_assignment_defaults.qdf deleted file mode 100644 index 3420a0f..0000000 --- a/sharpmz-lite_assignment_defaults.qdf +++ /dev/null @@ -1,808 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel MegaCore Function License Agreement, or other -# applicable license agreement, including, without limitation, -# that your use is for the sole purpose of programming logic -# devices manufactured by Intel and sold by Intel or its -# authorized distributors. Please refer to the applicable -# agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 17.0.2 Build 602 07/19/2017 SJ Lite Edition -# Date created = 18:06:35 June 18, 2018 -# -# -------------------------------------------------------------------------- # -# -# Note: -# -# 1) Do not modify this file. This file was generated -# automatically by the Quartus Prime software and is used -# to preserve global assignments across Quartus Prime versions. -# -# -------------------------------------------------------------------------- # - -set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off -set_global_assignment -name IP_COMPONENT_INTERNAL Off -set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On -set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off -set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off -set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db -set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off -set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off -set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off -set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off -set_global_assignment -name HC_OUTPUT_DIR hc_output -set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off -set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On -set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off -set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" -set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On -set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On -set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off -set_global_assignment -name REVISION_TYPE Base -family "Arria V" -set_global_assignment -name REVISION_TYPE Base -family "Stratix V" -set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" -set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" -set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" -set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On -set_global_assignment -name DO_COMBINED_ANALYSIS Off -set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off -set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off -set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off -set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off -set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On -set_global_assignment -name TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "MAX 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone V" -set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" -set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "MAX 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone V" -set_global_assignment -name OPTIMIZATION_MODE Balanced -set_global_assignment -name ALLOW_REGISTER_MERGING On -set_global_assignment -name ALLOW_REGISTER_DUPLICATION On -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix IV" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Arria 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX II" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone V" -set_global_assignment -name MUX_RESTRUCTURE Auto -set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off -set_global_assignment -name ENABLE_IP_DEBUG Off -set_global_assignment -name SAVE_DISK_SPACE On -set_global_assignment -name OCP_HW_EVAL -value ENABLE -set_global_assignment -name DEVICE_FILTER_PACKAGE Any -set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any -set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" -set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 -set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name TRUE_WYSIWYG_FLOW Off -set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off -set_global_assignment -name STATE_MACHINE_PROCESSING Auto -set_global_assignment -name SAFE_STATE_MACHINE Off -set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On -set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On -set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off -set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 -set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 -set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On -set_global_assignment -name PARALLEL_SYNTHESIS On -set_global_assignment -name DSP_BLOCK_BALANCING Auto -set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" -set_global_assignment -name NOT_GATE_PUSH_BACK On -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On -set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off -set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On -set_global_assignment -name IGNORE_CARRY_BUFFERS Off -set_global_assignment -name IGNORE_CASCADE_BUFFERS Off -set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_LCELL_BUFFERS Off -set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO -set_global_assignment -name IGNORE_SOFT_BUFFERS On -set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off -set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off -set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On -set_global_assignment -name AUTO_GLOBAL_OE_MAX On -set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off -set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut -set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed -set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name ALLOW_XOR_GATE_USAGE On -set_global_assignment -name AUTO_LCELL_INSERTION On -set_global_assignment -name CARRY_CHAIN_LENGTH 48 -set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 -set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name CASCADE_CHAIN_LENGTH 2 -set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 -set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 -set_global_assignment -name AUTO_CARRY_CHAINS On -set_global_assignment -name AUTO_CASCADE_CHAINS On -set_global_assignment -name AUTO_PARALLEL_EXPANDERS On -set_global_assignment -name AUTO_OPEN_DRAIN_PINS On -set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off -set_global_assignment -name AUTO_ROM_RECOGNITION On -set_global_assignment -name AUTO_RAM_RECOGNITION On -set_global_assignment -name AUTO_DSP_RECOGNITION On -set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto -set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On -set_global_assignment -name STRICT_RAM_RECOGNITION Off -set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On -set_global_assignment -name FORCE_SYNCH_CLEAR Off -set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On -set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off -set_global_assignment -name AUTO_RESOURCE_SHARING Off -set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off -set_global_assignment -name MAX7000_FANIN_PER_CELL 100 -set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On -set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" -set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off -set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" -set_global_assignment -name REPORT_PARAMETER_SETTINGS On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On -set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On -set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" -set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" -set_global_assignment -name HDL_MESSAGE_LEVEL Level2 -set_global_assignment -name USE_HIGH_SPEED_ADDER Auto -set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 -set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 -set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 -set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off -set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 -set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 -set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On -set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off -set_global_assignment -name BLOCK_DESIGN_NAMING Auto -set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off -set_global_assignment -name SYNTHESIS_EFFORT Auto -set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On -set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off -set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium -set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" -set_global_assignment -name MAX_LABS "-1 (Unlimited)" -set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On -set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" -set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On -set_global_assignment -name PRPOF_ID Off -set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off -set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On -set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off -set_global_assignment -name AUTO_MERGE_PLLS On -set_global_assignment -name IGNORE_MODE_FOR_MERGE Off -set_global_assignment -name TXPMA_SLEW_RATE Low -set_global_assignment -name ADCE_ENABLED Auto -set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal -set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off -set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 -set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS Off -set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off -set_global_assignment -name DEVICE AUTO -set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off -set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On -set_global_assignment -name ENABLE_NCEO_OUTPUT Off -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name STRATIXIII_UPDATE_MODE Standard -set_global_assignment -name STRATIX_UPDATE_MODE Standard -set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" -set_global_assignment -name CVP_MODE Off -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" -set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" -set_global_assignment -name USE_CONF_DONE AUTO -set_global_assignment -name USE_PWRMGT_SCL AUTO -set_global_assignment -name USE_PWRMGT_SDA AUTO -set_global_assignment -name USE_PWRMGT_ALERT AUTO -set_global_assignment -name USE_INIT_DONE AUTO -set_global_assignment -name USE_CVP_CONFDONE AUTO -set_global_assignment -name USE_SEU_ERROR AUTO -set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name USER_START_UP_CLOCK Off -set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off -set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off -set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On -set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On -set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -set_global_assignment -name ENABLE_VREFA_PIN Off -set_global_assignment -name ENABLE_VREFB_PIN Off -set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off -set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off -set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off -set_global_assignment -name INIT_DONE_OPEN_DRAIN On -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name ENABLE_CONFIGURATION_PINS On -set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off -set_global_assignment -name ENABLE_NCE_PIN Off -set_global_assignment -name ENABLE_BOOT_SEL_PIN On -set_global_assignment -name CRC_ERROR_CHECKING Off -set_global_assignment -name INTERNAL_SCRUBBING Off -set_global_assignment -name PR_ERROR_OPEN_DRAIN On -set_global_assignment -name PR_READY_OPEN_DRAIN On -set_global_assignment -name ENABLE_CVP_CONFDONE Off -set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On -set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" -set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" -set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 -set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" -set_global_assignment -name OPTIMIZE_SSN Off -set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" -set_global_assignment -name ECO_OPTIMIZE_TIMING Off -set_global_assignment -name ECO_REGENERATE_REPORT Off -set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal -set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically -set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically -set_global_assignment -name SEED 1 -set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF -set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off -set_global_assignment -name SLOW_SLEW_RATE Off -set_global_assignment -name PCI_IO Off -set_global_assignment -name TURBO_BIT On -set_global_assignment -name WEAK_PULL_UP_RESISTOR Off -set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off -set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off -set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On -set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto -set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto -set_global_assignment -name NORMAL_LCELL_INSERT On -set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" -set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF -set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off -set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off -set_global_assignment -name AUTO_TURBO_BIT ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off -set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off -set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On -set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off -set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off -set_global_assignment -name FITTER_EFFORT "Auto Fit" -set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal -set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto -set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto -set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off -set_global_assignment -name AUTO_GLOBAL_CLOCK On -set_global_assignment -name AUTO_GLOBAL_OE On -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic -set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off -set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" -set_global_assignment -name ENABLE_HOLD_BACK_OFF On -set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto -set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off -set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto -set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On -set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" -set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" -set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off -set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On -set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off -set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off -set_global_assignment -name PR_DONE_OPEN_DRAIN On -set_global_assignment -name NCEO_OPEN_DRAIN On -set_global_assignment -name ENABLE_CRC_ERROR_PIN Off -set_global_assignment -name ENABLE_PR_PINS Off -set_global_assignment -name RESERVE_PR_PINS Off -set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off -set_global_assignment -name PR_PINS_OPEN_DRAIN Off -set_global_assignment -name CLAMPING_DIODE Off -set_global_assignment -name TRI_STATE_SPI_PINS Off -set_global_assignment -name UNUSED_TSD_PINS_GND Off -set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off -set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off -set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" -set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 -set_global_assignment -name SEU_FIT_REPORT Off -set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On -set_global_assignment -name EDA_SIMULATION_TOOL "" -set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" -set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" -set_global_assignment -name EDA_RESYNTHESIS_TOOL "" -set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On -set_global_assignment -name COMPRESSION_MODE Off -set_global_assignment -name CLOCK_SOURCE Internal -set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" -set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 -set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF -set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name USE_CHECKSUM_AS_USERCODE On -set_global_assignment -name SECURITY_BIT Off -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" -set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto -set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" -set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 -set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 -set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto -set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto -set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto -set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off -set_global_assignment -name GENERATE_TTF_FILE Off -set_global_assignment -name GENERATE_RBF_FILE Off -set_global_assignment -name GENERATE_HEX_FILE Off -set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 -set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off -set_global_assignment -name AUTO_RESTART_CONFIGURATION On -set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off -set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off -set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" -set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" -set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF -set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off -set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off -set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off -set_global_assignment -name POR_SCHEME "Instant ON" -set_global_assignment -name EN_USER_IO_WEAK_PULLUP On -set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On -set_global_assignment -name POF_VERIFY_PROTECT Off -set_global_assignment -name ENABLE_SPI_MODE_CHECK Off -set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On -set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off -set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 -set_global_assignment -name GENERATE_PMSF_FILES On -set_global_assignment -name START_TIME 0ns -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off -set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On -set_global_assignment -name SETUP_HOLD_DETECTION Off -set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -set_global_assignment -name CHECK_OUTPUTS Off -set_global_assignment -name SIMULATION_COVERAGE On -set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name GLITCH_DETECTION Off -set_global_assignment -name GLITCH_INTERVAL 1ns -set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off -set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On -set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off -set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On -set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE -set_global_assignment -name SIMULATION_NETLIST_VIEWER Off -set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off -set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO -set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO -set_global_assignment -name DRC_TOP_FANOUT 50 -set_global_assignment -name DRC_FANOUT_EXCEEDING 30 -set_global_assignment -name DRC_GATED_CLOCK_FEED 30 -set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY -set_global_assignment -name ENABLE_DRC_SETTINGS Off -set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 -set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 -set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 -set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 -set_global_assignment -name MERGE_HEX_FILE Off -set_global_assignment -name GENERATE_SVF_FILE Off -set_global_assignment -name GENERATE_ISC_FILE Off -set_global_assignment -name GENERATE_JAM_FILE Off -set_global_assignment -name GENERATE_JBC_FILE Off -set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off -set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off -set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" -set_global_assignment -name HPS_EARLY_IO_RELEASE Off -set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off -set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off -set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_USE_PVA On -set_global_assignment -name POWER_USE_INPUT_FILE "No File" -set_global_assignment -name POWER_USE_INPUT_FILES Off -set_global_assignment -name POWER_VCD_FILTER_GLITCHES On -set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off -set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off -set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -set_global_assignment -name POWER_AUTO_COMPUTE_TJ On -set_global_assignment -name POWER_TJ_VALUE 25 -set_global_assignment -name POWER_USE_TA_VALUE 25 -set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off -set_global_assignment -name POWER_BOARD_TEMPERATURE 25 -set_global_assignment -name POWER_HPS_ENABLE Off -set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 -set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off -set_global_assignment -name IGNORE_PARTITIONS Off -set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off -set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On -set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" -set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On -set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On -set_global_assignment -name RTLV_GROUP_RELATED_NODES On -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off -set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On -set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On -set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On -set_global_assignment -name EQC_BBOX_MERGE On -set_global_assignment -name EQC_LVDS_MERGE On -set_global_assignment -name EQC_RAM_UNMERGING On -set_global_assignment -name EQC_DFF_SS_EMULATION On -set_global_assignment -name EQC_RAM_REGISTER_UNPACK On -set_global_assignment -name EQC_MAC_REGISTER_UNPACK On -set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On -set_global_assignment -name EQC_STRUCTURE_MATCHING On -set_global_assignment -name EQC_AUTO_BREAK_CONE On -set_global_assignment -name EQC_POWER_UP_COMPARE Off -set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On -set_global_assignment -name EQC_AUTO_INVERSION On -set_global_assignment -name EQC_AUTO_TERMINATE On -set_global_assignment -name EQC_SUB_CONE_REPORT Off -set_global_assignment -name EQC_RENAMING_RULES On -set_global_assignment -name EQC_PARAMETER_CHECK On -set_global_assignment -name EQC_AUTO_PORTSWAP On -set_global_assignment -name EQC_DETECT_DONT_CARES On -set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? -set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? -set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? -set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? -set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? -set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? -set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? -set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? -set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? -set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? -set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? -set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? -set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? -set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? -set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? -set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? -set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? -set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? -set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? -set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? -set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? -set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? -set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? -set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? -set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? -set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? -set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? -set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? -set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? -set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? -set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? -set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? -set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? -set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? -set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? -set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? -set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? -set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/sharpmz.qpf b/sharpmz.qpf index ef7dcca..82fdcd2 100644 --- a/sharpmz.qpf +++ b/sharpmz.qpf @@ -1,31 +1,2 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel FPGA IP License Agreement, or other applicable license -# agreement, including, without limitation, that your use is for -# the sole purpose of programming logic devices manufactured by -# Intel and sold by Intel or its authorized distributors. Please -# refer to the applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 17.1.1 Internal Build 593 12/11/2017 SJ Standard Edition -# Date created = 15:03:54 April 29, 2020 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "17.1" -DATE = "15:03:54 April 29, 2020" - -# Revisions - -PROJECT_REVISION = "sharpmz-lite" +QUARTUS_VERSION = "17.0" PROJECT_REVISION = "sharpmz" diff --git a/sharpmz.qsf b/sharpmz.qsf index 27edd4a..c682eee 100644 --- a/sharpmz.qsf +++ b/sharpmz.qsf @@ -1,358 +1,66 @@ -# -------------------------------------------------------------------------- # +# -------------------------------------------------------------------------- # -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel MegaCore Function License Agreement, or other -# applicable license agreement, including, without limitation, -# that your use is for the sole purpose of programming logic -# devices manufactured by Intel and sold by Intel or its -# authorized distributors. Please refer to the applicable -# agreement for further details. +# MiSTer project # -# -------------------------------------------------------------------------- # +# WARNING WARNING WARNING: +# Do not add files to project in Quartus IDE! It will mess this file! +# Add the files manually to files.qip file. # -# Quartus Prime -# Version 16.1.2 Build 203 01/18/2017 SJ Standard Edition -# Date created = 01:53:32 April 20, 2017 -# -# -------------------------------------------------------------------------- # +# -------------------------------------------------------------------------- -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name DEVICE 5CSEBA6U23I7 set_global_assignment -name TOP_LEVEL_ENTITY sys_top -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 -set_global_assignment -name LAST_QUARTUS_VERSION "17.1.1 Standard Edition" -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40" -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 -set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" -set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -set_global_assignment -name OPTIMIZATION_MODE "HIGH PERFORMANCE EFFORT" -set_global_assignment -name SEED 1 +set_global_assignment -name LAST_QUARTUS_VERSION "17.0.2 Lite Edition" -#============================================================ -# ADC -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CONVST -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDI -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDO -set_location_assignment PIN_U9 -to ADC_CONVST -set_location_assignment PIN_V10 -to ADC_SCK -set_location_assignment PIN_AC4 -to ADC_SDI -set_location_assignment PIN_AD4 -to ADC_SDO +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL +set_global_assignment -name SAVE_DISK_SPACE OFF +set_global_assignment -name SMART_RECOMPILE ON +set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40" +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS +set_global_assignment -name FITTER_EFFORT "STANDARD FIT" +set_global_assignment -name OPTIMIZATION_MODE "HIGH PERFORMANCE EFFORT" +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON +set_global_assignment -name QII_AUTO_PACKED_REGISTERS NORMAL +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON +set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name MUX_RESTRUCTURE ON +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS ON +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP ON +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION ON +set_global_assignment -name PRE_MAPPING_RESYNTHESIS ON +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON +set_global_assignment -name ECO_OPTIMIZE_TIMING ON +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING ON +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT MEDIUM +set_global_assignment -name SEED 1 -#============================================================ -# ARDUINO -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[7] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[8] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[9] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[10] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[11] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[12] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[13] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[14] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[15] -set_location_assignment PIN_AG9 -to ARDUINO_IO[3] -set_location_assignment PIN_U14 -to ARDUINO_IO[4] -set_location_assignment PIN_U13 -to ARDUINO_IO[5] -set_location_assignment PIN_AG8 -to ARDUINO_IO[6] -set_location_assignment PIN_AH8 -to ARDUINO_IO[7] -set_location_assignment PIN_AF17 -to ARDUINO_IO[8] -set_location_assignment PIN_AE15 -to ARDUINO_IO[9] -set_location_assignment PIN_AF15 -to ARDUINO_IO[10] -set_location_assignment PIN_AG16 -to ARDUINO_IO[11] -set_location_assignment PIN_AH11 -to ARDUINO_IO[12] -set_location_assignment PIN_AH12 -to ARDUINO_IO[13] -set_location_assignment PIN_AH9 -to ARDUINO_IO[14] -set_location_assignment PIN_AG11 -to ARDUINO_IO[15] +#set_global_assignment -name VERILOG_MACRO "MISTER_FB=1" -#============================================================ -# SDIO -#============================================================ -set_location_assignment PIN_AF25 -to SDIO_DAT[0] -set_location_assignment PIN_AF23 -to SDIO_DAT[1] -set_location_assignment PIN_AD26 -to SDIO_DAT[2] -set_location_assignment PIN_AF28 -to SDIO_DAT[3] -set_location_assignment PIN_AF27 -to SDIO_CMD -set_location_assignment PIN_AH26 -to SDIO_CLK -set_location_assignment PIN_AH7 -to SDIO_CD +#enable it only if 8bit indexed mode is used in core +#set_global_assignment -name VERILOG_MACRO "MISTER_FB_PALETTE=1" -set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* +#set_global_assignment -name VERILOG_MACRO "MISTER_DUAL_SDRAM=1" -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CD +#do not enable DEBUG_NOHDMI in release! +#set_global_assignment -name VERILOG_MACRO "MISTER_DEBUG_NOHDMI=1" -#============================================================ -# VGA -#============================================================ -set_location_assignment PIN_AE17 -to VGA_R[0] -set_location_assignment PIN_AE20 -to VGA_R[1] -set_location_assignment PIN_AF20 -to VGA_R[2] -set_location_assignment PIN_AH18 -to VGA_R[3] -set_location_assignment PIN_AH19 -to VGA_R[4] -set_location_assignment PIN_AF21 -to VGA_R[5] - -set_location_assignment PIN_AE19 -to VGA_G[0] -set_location_assignment PIN_AG15 -to VGA_G[1] -set_location_assignment PIN_AF18 -to VGA_G[2] -set_location_assignment PIN_AG18 -to VGA_G[3] -set_location_assignment PIN_AG19 -to VGA_G[4] -set_location_assignment PIN_AG20 -to VGA_G[5] - -set_location_assignment PIN_AG21 -to VGA_B[0] -set_location_assignment PIN_AA20 -to VGA_B[1] -set_location_assignment PIN_AE22 -to VGA_B[2] -set_location_assignment PIN_AF22 -to VGA_B[3] -set_location_assignment PIN_AH23 -to VGA_B[4] -set_location_assignment PIN_AH21 -to VGA_B[5] - -set_location_assignment PIN_AH22 -to VGA_HS -set_location_assignment PIN_AG24 -to VGA_VS - -set_location_assignment PIN_AH27 -to VGA_EN -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* - -#============================================================ -# AUDIO -#============================================================ -set_location_assignment PIN_AC24 -to AUDIO_L -set_location_assignment PIN_AE25 -to AUDIO_R -set_location_assignment PIN_AG26 -to AUDIO_SPDIF -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* -set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* - -#============================================================ -# SDRAM -#============================================================ -set_location_assignment PIN_Y11 -to SDRAM_A[0] -set_location_assignment PIN_AA26 -to SDRAM_A[1] -set_location_assignment PIN_AA13 -to SDRAM_A[2] -set_location_assignment PIN_AA11 -to SDRAM_A[3] -set_location_assignment PIN_W11 -to SDRAM_A[4] -set_location_assignment PIN_Y19 -to SDRAM_A[5] -set_location_assignment PIN_AB23 -to SDRAM_A[6] -set_location_assignment PIN_AC23 -to SDRAM_A[7] -set_location_assignment PIN_AC22 -to SDRAM_A[8] -set_location_assignment PIN_C12 -to SDRAM_A[9] -set_location_assignment PIN_AB26 -to SDRAM_A[10] -set_location_assignment PIN_AD17 -to SDRAM_A[11] -set_location_assignment PIN_D12 -to SDRAM_A[12] -set_location_assignment PIN_Y17 -to SDRAM_BA[0] -set_location_assignment PIN_AB25 -to SDRAM_BA[1] - -set_location_assignment PIN_E8 -to SDRAM_DQ[0] -set_location_assignment PIN_V12 -to SDRAM_DQ[1] -set_location_assignment PIN_D11 -to SDRAM_DQ[2] -set_location_assignment PIN_W12 -to SDRAM_DQ[3] -set_location_assignment PIN_AH13 -to SDRAM_DQ[4] -set_location_assignment PIN_D8 -to SDRAM_DQ[5] -set_location_assignment PIN_AH14 -to SDRAM_DQ[6] -set_location_assignment PIN_AF7 -to SDRAM_DQ[7] -set_location_assignment PIN_AE24 -to SDRAM_DQ[8] -set_location_assignment PIN_AD23 -to SDRAM_DQ[9] -set_location_assignment PIN_AE6 -to SDRAM_DQ[10] -set_location_assignment PIN_AE23 -to SDRAM_DQ[11] -set_location_assignment PIN_AG14 -to SDRAM_DQ[12] -set_location_assignment PIN_AD5 -to SDRAM_DQ[13] -set_location_assignment PIN_AF4 -to SDRAM_DQ[14] -set_location_assignment PIN_AH3 -to SDRAM_DQ[15] -set_location_assignment PIN_AG13 -to SDRAM_DQML -set_location_assignment PIN_AF13 -to SDRAM_DQMH - -set_location_assignment PIN_AD20 -to SDRAM_CLK -set_location_assignment PIN_AG10 -to SDRAM_CKE - -set_location_assignment PIN_AA19 -to SDRAM_nWE -set_location_assignment PIN_AA18 -to SDRAM_nCAS -set_location_assignment PIN_Y18 -to SDRAM_nCS -set_location_assignment PIN_W14 -to SDRAM_nRAS - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_* -set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*] -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQM* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_n* -set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] -set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* - -#============================================================ -# I/O -#============================================================ -set_location_assignment PIN_Y15 -to LED_USER -set_location_assignment PIN_AA15 -to LED_HDD -set_location_assignment PIN_AG28 -to LED_POWER - -set_location_assignment PIN_AH24 -to BTN_USER -set_location_assignment PIN_AG25 -to BTN_OSD -set_location_assignment PIN_AG23 -to BTN_RESET - -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* - -#============================================================ -# CLOCK -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK1_50 -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK2_50 -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK3_50 -set_location_assignment PIN_V11 -to FPGA_CLK1_50 -set_location_assignment PIN_Y13 -to FPGA_CLK2_50 -set_location_assignment PIN_E11 -to FPGA_CLK3_50 - -#============================================================ -# HDMI -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SCL -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_SDA -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2S -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_LRCLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_MCLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_SCLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_CLK -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_DE -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[1] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[2] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[7] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[8] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[9] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[10] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[11] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[12] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[13] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[14] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[15] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[16] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[17] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[18] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[19] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[20] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[21] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[22] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_D[23] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_HS -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_INT -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_VS -set_location_assignment PIN_U10 -to HDMI_I2C_SCL -set_location_assignment PIN_AA4 -to HDMI_I2C_SDA -set_location_assignment PIN_T13 -to HDMI_I2S -set_location_assignment PIN_T11 -to HDMI_LRCLK -set_location_assignment PIN_U11 -to HDMI_MCLK -set_location_assignment PIN_T12 -to HDMI_SCLK -set_location_assignment PIN_AG5 -to HDMI_TX_CLK -set_location_assignment PIN_AD19 -to HDMI_TX_DE -set_location_assignment PIN_AD12 -to HDMI_TX_D[0] -set_location_assignment PIN_AE12 -to HDMI_TX_D[1] -set_location_assignment PIN_W8 -to HDMI_TX_D[2] -set_location_assignment PIN_Y8 -to HDMI_TX_D[3] -set_location_assignment PIN_AD11 -to HDMI_TX_D[4] -set_location_assignment PIN_AD10 -to HDMI_TX_D[5] -set_location_assignment PIN_AE11 -to HDMI_TX_D[6] -set_location_assignment PIN_Y5 -to HDMI_TX_D[7] -set_location_assignment PIN_AF10 -to HDMI_TX_D[8] -set_location_assignment PIN_Y4 -to HDMI_TX_D[9] -set_location_assignment PIN_AE9 -to HDMI_TX_D[10] -set_location_assignment PIN_AB4 -to HDMI_TX_D[11] -set_location_assignment PIN_AE7 -to HDMI_TX_D[12] -set_location_assignment PIN_AF6 -to HDMI_TX_D[13] -set_location_assignment PIN_AF8 -to HDMI_TX_D[14] -set_location_assignment PIN_AF5 -to HDMI_TX_D[15] -set_location_assignment PIN_AE4 -to HDMI_TX_D[16] -set_location_assignment PIN_AH2 -to HDMI_TX_D[17] -set_location_assignment PIN_AH4 -to HDMI_TX_D[18] -set_location_assignment PIN_AH5 -to HDMI_TX_D[19] -set_location_assignment PIN_AH6 -to HDMI_TX_D[20] -set_location_assignment PIN_AG6 -to HDMI_TX_D[21] -set_location_assignment PIN_AF9 -to HDMI_TX_D[22] -set_location_assignment PIN_AE8 -to HDMI_TX_D[23] -set_location_assignment PIN_T8 -to HDMI_TX_HS -set_location_assignment PIN_AF11 -to HDMI_TX_INT -set_location_assignment PIN_V13 -to HDMI_TX_VS - -#============================================================ -# KEY -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1] -set_location_assignment PIN_AH17 -to KEY[0] -set_location_assignment PIN_AH16 -to KEY[1] - -#============================================================ -# LED -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[1] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[2] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[3] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[4] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[5] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[6] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[7] -set_location_assignment PIN_W15 -to LED[0] -set_location_assignment PIN_AA24 -to LED[1] -set_location_assignment PIN_V16 -to LED[2] -set_location_assignment PIN_V15 -to LED[3] -set_location_assignment PIN_AF26 -to LED[4] -set_location_assignment PIN_AE26 -to LED[5] -set_location_assignment PIN_Y16 -to LED[6] -set_location_assignment PIN_AA23 -to LED[7] - -#============================================================ -# SW -#============================================================ -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2] -set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3] -set_location_assignment PIN_Y24 -to SW[0] -set_location_assignment PIN_W24 -to SW[1] -set_location_assignment PIN_W21 -to SW[2] -set_location_assignment PIN_W20 -to SW[3] - -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" - -set_global_assignment -name CDF_FILE jtag.cdf -set_global_assignment -name QIP_FILE sys/sys.qip -set_global_assignment -name QSYS_FILE sys/vip.qsys - +source sys/sys.tcl +source sys/sys_analog.tcl +source files.qip set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/sharpmz.vhd b/sharpmz.vhd index f0d3b24..e81f37a 100644 --- a/sharpmz.vhd +++ b/sharpmz.vhd @@ -1089,7 +1089,7 @@ begin -- Clocks. -- CLKSYS <= CLKBUS(CKMASTER); -- HPS clock. - CLKVID <= CLKBUS(CKVIDEO); -- Video pixel clock output. + CLKVID <= CLKBUS(CKENVIDEO);--CKVIDEO); -- Video pixel clock output. CLKIOP <= CLKBUS(CKIOP); -- IO Processor Clock. -- Multiplexer -> Signals to enabled hardware. diff --git a/sharpmz_assignment_defaults.qdf b/sharpmz_assignment_defaults.qdf deleted file mode 100644 index c9c4c19..0000000 --- a/sharpmz_assignment_defaults.qdf +++ /dev/null @@ -1,807 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License -# Subscription Agreement, the Intel Quartus Prime License Agreement, -# the Intel FPGA IP License Agreement, or other applicable license -# agreement, including, without limitation, that your use is for -# the sole purpose of programming logic devices manufactured by -# Intel and sold by Intel or its authorized distributors. Please -# refer to the applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus Prime -# Version 17.1.1 Internal Build 593 12/11/2017 SJ Standard Edition -# Date created = 18:26:55 June 18, 2018 -# -# -------------------------------------------------------------------------- # -# -# Note: -# -# 1) Do not modify this file. This file was generated -# automatically by the Quartus Prime software and is used -# to preserve global assignments across Quartus Prime versions. -# -# -------------------------------------------------------------------------- # - -set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off -set_global_assignment -name IP_COMPONENT_INTERNAL Off -set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On -set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off -set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off -set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db -set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off -set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off -set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off -set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off -set_global_assignment -name HC_OUTPUT_DIR hc_output -set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off -set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On -set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off -set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" -set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On -set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On -set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off -set_global_assignment -name REVISION_TYPE Base -family "Arria V" -set_global_assignment -name REVISION_TYPE Base -family "Stratix V" -set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" -set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" -set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" -set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On -set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On -set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On -set_global_assignment -name DO_COMBINED_ANALYSIS Off -set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off -set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off -set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off -set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off -set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On -set_global_assignment -name TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "MAX 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria 10" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix V" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone V" -set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" -set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "MAX 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria 10" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix V" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone V" -set_global_assignment -name OPTIMIZATION_MODE Balanced -set_global_assignment -name ALLOW_REGISTER_MERGING On -set_global_assignment -name ALLOW_REGISTER_DUPLICATION On -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Cyclone 10 LP" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix IV" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV E" -set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Arria 10" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix V" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX II" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GZ" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV GX" -set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone V" -set_global_assignment -name MUX_RESTRUCTURE Auto -set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off -set_global_assignment -name ENABLE_IP_DEBUG Off -set_global_assignment -name SAVE_DISK_SPACE On -set_global_assignment -name OCP_HW_EVAL Enable -set_global_assignment -name DEVICE_FILTER_PACKAGE Any -set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any -set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" -set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 -set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name TRUE_WYSIWYG_FLOW Off -set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off -set_global_assignment -name STATE_MACHINE_PROCESSING Auto -set_global_assignment -name SAFE_STATE_MACHINE Off -set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On -set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On -set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off -set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 -set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 -set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On -set_global_assignment -name PARALLEL_SYNTHESIS On -set_global_assignment -name DSP_BLOCK_BALANCING Auto -set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" -set_global_assignment -name NOT_GATE_PUSH_BACK On -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On -set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off -set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On -set_global_assignment -name IGNORE_CARRY_BUFFERS Off -set_global_assignment -name IGNORE_CASCADE_BUFFERS Off -set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off -set_global_assignment -name IGNORE_LCELL_BUFFERS Off -set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO -set_global_assignment -name IGNORE_SOFT_BUFFERS On -set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off -set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off -set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On -set_global_assignment -name AUTO_GLOBAL_OE_MAX On -set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off -set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut -set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed -set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced -set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area -set_global_assignment -name ALLOW_XOR_GATE_USAGE On -set_global_assignment -name AUTO_LCELL_INSERTION On -set_global_assignment -name CARRY_CHAIN_LENGTH 48 -set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 -set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 -set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 -set_global_assignment -name CASCADE_CHAIN_LENGTH 2 -set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 -set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 -set_global_assignment -name AUTO_CARRY_CHAINS On -set_global_assignment -name AUTO_CASCADE_CHAINS On -set_global_assignment -name AUTO_PARALLEL_EXPANDERS On -set_global_assignment -name AUTO_OPEN_DRAIN_PINS On -set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off -set_global_assignment -name AUTO_ROM_RECOGNITION On -set_global_assignment -name AUTO_RAM_RECOGNITION On -set_global_assignment -name AUTO_DSP_RECOGNITION On -set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto -set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On -set_global_assignment -name STRICT_RAM_RECOGNITION Off -set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On -set_global_assignment -name FORCE_SYNCH_CLEAR Off -set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On -set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off -set_global_assignment -name AUTO_RESOURCE_SHARING Off -set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off -set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off -set_global_assignment -name MAX7000_FANIN_PER_CELL 100 -set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On -set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" -set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" -set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off -set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" -set_global_assignment -name REPORT_PARAMETER_SETTINGS On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On -set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On -set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" -set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" -set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" -set_global_assignment -name HDL_MESSAGE_LEVEL Level2 -set_global_assignment -name USE_HIGH_SPEED_ADDER Auto -set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 -set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 -set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 -set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off -set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 -set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 -set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On -set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off -set_global_assignment -name BLOCK_DESIGN_NAMING Auto -set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off -set_global_assignment -name SYNTHESIS_EFFORT Auto -set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On -set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off -set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium -set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" -set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" -set_global_assignment -name MAX_LABS "-1 (Unlimited)" -set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On -set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" -set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On -set_global_assignment -name PRPOF_ID Off -set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off -set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On -set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On -set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off -set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off -set_global_assignment -name AUTO_MERGE_PLLS On -set_global_assignment -name IGNORE_MODE_FOR_MERGE Off -set_global_assignment -name TXPMA_SLEW_RATE Low -set_global_assignment -name ADCE_ENABLED Auto -set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal -set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off -set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 -set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 -set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS Off -set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off -set_global_assignment -name DEVICE AUTO -set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off -set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off -set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On -set_global_assignment -name ENABLE_NCEO_OUTPUT Off -set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name STRATIXIII_UPDATE_MODE Standard -set_global_assignment -name STRATIX_UPDATE_MODE Standard -set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" -set_global_assignment -name CVP_MODE Off -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" -set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" -set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" -set_global_assignment -name USE_CONF_DONE AUTO -set_global_assignment -name USE_PWRMGT_SCL AUTO -set_global_assignment -name USE_PWRMGT_SDA AUTO -set_global_assignment -name USE_PWRMGT_ALERT AUTO -set_global_assignment -name USE_INIT_DONE AUTO -set_global_assignment -name USE_CVP_CONFDONE AUTO -set_global_assignment -name USE_SEU_ERROR AUTO -set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" -set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" -set_global_assignment -name USER_START_UP_CLOCK Off -set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off -set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off -set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On -set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On -set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC -set_global_assignment -name ENABLE_VREFA_PIN Off -set_global_assignment -name ENABLE_VREFB_PIN Off -set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off -set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off -set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off -set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" -set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off -set_global_assignment -name INIT_DONE_OPEN_DRAIN On -set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" -set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" -set_global_assignment -name ENABLE_CONFIGURATION_PINS On -set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off -set_global_assignment -name ENABLE_NCE_PIN Off -set_global_assignment -name ENABLE_BOOT_SEL_PIN On -set_global_assignment -name CRC_ERROR_CHECKING Off -set_global_assignment -name INTERNAL_SCRUBBING Off -set_global_assignment -name PR_ERROR_OPEN_DRAIN On -set_global_assignment -name PR_READY_OPEN_DRAIN On -set_global_assignment -name ENABLE_CVP_CONFDONE Off -set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On -set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" -set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto -set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" -set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" -set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 -set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" -set_global_assignment -name OPTIMIZE_SSN Off -set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" -set_global_assignment -name ECO_OPTIMIZE_TIMING Off -set_global_assignment -name ECO_REGENERATE_REPORT Off -set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal -set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically -set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically -set_global_assignment -name SEED 1 -set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF -set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off -set_global_assignment -name SLOW_SLEW_RATE Off -set_global_assignment -name PCI_IO Off -set_global_assignment -name TURBO_BIT On -set_global_assignment -name WEAK_PULL_UP_RESISTOR Off -set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off -set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off -set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On -set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto -set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto -set_global_assignment -name NORMAL_LCELL_INSERT On -set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" -set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" -set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF -set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off -set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off -set_global_assignment -name AUTO_TURBO_BIT ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off -set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off -set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On -set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off -set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off -set_global_assignment -name FITTER_EFFORT "Auto Fit" -set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal -set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto -set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto -set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off -set_global_assignment -name AUTO_GLOBAL_CLOCK On -set_global_assignment -name AUTO_GLOBAL_OE On -set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic -set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off -set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off -set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off -set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off -set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off -set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" -set_global_assignment -name ENABLE_HOLD_BACK_OFF On -set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto -set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off -set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto -set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On -set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" -set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" -set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" -set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off -set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On -set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off -set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off -set_global_assignment -name PR_DONE_OPEN_DRAIN On -set_global_assignment -name NCEO_OPEN_DRAIN On -set_global_assignment -name ENABLE_CRC_ERROR_PIN Off -set_global_assignment -name ENABLE_PR_PINS Off -set_global_assignment -name RESERVE_PR_PINS Off -set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off -set_global_assignment -name PR_PINS_OPEN_DRAIN Off -set_global_assignment -name CLAMPING_DIODE Off -set_global_assignment -name TRI_STATE_SPI_PINS Off -set_global_assignment -name UNUSED_TSD_PINS_GND Off -set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off -set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off -set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" -set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" -set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 -set_global_assignment -name SEU_FIT_REPORT Off -set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On -set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On -set_global_assignment -name EDA_SIMULATION_TOOL "" -set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" -set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" -set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" -set_global_assignment -name EDA_RESYNTHESIS_TOOL "" -set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On -set_global_assignment -name COMPRESSION_MODE Off -set_global_assignment -name CLOCK_SOURCE Internal -set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" -set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 -set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off -set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On -set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF -set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F -set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name USE_CHECKSUM_AS_USERCODE On -set_global_assignment -name SECURITY_BIT Off -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" -set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" -set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" -set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto -set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" -set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 -set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 -set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 -set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 -set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto -set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto -set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto -set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto -set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto -set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF -set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off -set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On -set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off -set_global_assignment -name GENERATE_TTF_FILE Off -set_global_assignment -name GENERATE_RBF_FILE Off -set_global_assignment -name GENERATE_HEX_FILE Off -set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 -set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up -set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" -set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off -set_global_assignment -name AUTO_RESTART_CONFIGURATION On -set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off -set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off -set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" -set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" -set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" -set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF -set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off -set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off -set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off -set_global_assignment -name POR_SCHEME "Instant ON" -set_global_assignment -name EN_USER_IO_WEAK_PULLUP On -set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On -set_global_assignment -name POF_VERIFY_PROTECT Off -set_global_assignment -name ENABLE_SPI_MODE_CHECK Off -set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On -set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off -set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 -set_global_assignment -name GENERATE_PMSF_FILES On -set_global_assignment -name START_TIME 0ns -set_global_assignment -name SIMULATION_MODE TIMING -set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off -set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On -set_global_assignment -name SETUP_HOLD_DETECTION Off -set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -set_global_assignment -name CHECK_OUTPUTS Off -set_global_assignment -name SIMULATION_COVERAGE On -set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On -set_global_assignment -name GLITCH_DETECTION Off -set_global_assignment -name GLITCH_INTERVAL 1ns -set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off -set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On -set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off -set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On -set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE -set_global_assignment -name SIMULATION_NETLIST_VIEWER Off -set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT -set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off -set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO -set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO -set_global_assignment -name DRC_TOP_FANOUT 50 -set_global_assignment -name DRC_FANOUT_EXCEEDING 30 -set_global_assignment -name DRC_GATED_CLOCK_FEED 30 -set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY -set_global_assignment -name ENABLE_DRC_SETTINGS Off -set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 -set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 -set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 -set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 -set_global_assignment -name MERGE_HEX_FILE Off -set_global_assignment -name GENERATE_SVF_FILE Off -set_global_assignment -name GENERATE_ISC_FILE Off -set_global_assignment -name GENERATE_JAM_FILE Off -set_global_assignment -name GENERATE_JBC_FILE Off -set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off -set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off -set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On -set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off -set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" -set_global_assignment -name HPS_EARLY_IO_RELEASE Off -set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off -set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off -set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% -set_global_assignment -name POWER_USE_PVA On -set_global_assignment -name POWER_USE_INPUT_FILE "No File" -set_global_assignment -name POWER_USE_INPUT_FILES Off -set_global_assignment -name POWER_VCD_FILTER_GLITCHES On -set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off -set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off -set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL -set_global_assignment -name POWER_AUTO_COMPUTE_TJ On -set_global_assignment -name POWER_TJ_VALUE 25 -set_global_assignment -name POWER_USE_TA_VALUE 25 -set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off -set_global_assignment -name POWER_BOARD_TEMPERATURE 25 -set_global_assignment -name POWER_HPS_ENABLE Off -set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 -set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off -set_global_assignment -name IGNORE_PARTITIONS Off -set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off -set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On -set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" -set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On -set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On -set_global_assignment -name RTLV_GROUP_RELATED_NODES On -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off -set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off -set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On -set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On -set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On -set_global_assignment -name EQC_BBOX_MERGE On -set_global_assignment -name EQC_LVDS_MERGE On -set_global_assignment -name EQC_RAM_UNMERGING On -set_global_assignment -name EQC_DFF_SS_EMULATION On -set_global_assignment -name EQC_RAM_REGISTER_UNPACK On -set_global_assignment -name EQC_MAC_REGISTER_UNPACK On -set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On -set_global_assignment -name EQC_STRUCTURE_MATCHING On -set_global_assignment -name EQC_AUTO_BREAK_CONE On -set_global_assignment -name EQC_POWER_UP_COMPARE Off -set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On -set_global_assignment -name EQC_AUTO_INVERSION On -set_global_assignment -name EQC_AUTO_TERMINATE On -set_global_assignment -name EQC_SUB_CONE_REPORT Off -set_global_assignment -name EQC_RENAMING_RULES On -set_global_assignment -name EQC_PARAMETER_CHECK On -set_global_assignment -name EQC_AUTO_PORTSWAP On -set_global_assignment -name EQC_DETECT_DONT_CARES On -set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off -set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? -set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? -set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? -set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? -set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? -set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? -set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? -set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? -set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? -set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? -set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? -set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? -set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? -set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? -set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? -set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? -set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? -set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? -set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? -set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? -set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? -set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? -set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? -set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? -set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? -set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? -set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? -set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? -set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? -set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? -set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? -set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? -set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? -set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? -set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? -set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? -set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? -set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? -set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? -set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? -set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? -set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? -set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? -set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? -set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? -set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? -set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? -set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? -set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? -set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? -set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/sys/alsa.sv b/sys/alsa.sv new file mode 100644 index 0000000..9034389 --- /dev/null +++ b/sys/alsa.sv @@ -0,0 +1,157 @@ +//============================================================================ +// +// ALSA sound support for MiSTer +// (c)2019,2020 Alexey Melnikov +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +module alsa +#( + parameter CLK_RATE = 24576000 +) +( + input reset, + input clk, + + output reg [31:3] ram_address, + input [63:0] ram_data, + output reg ram_req = 0, + input ram_ready, + + input spi_ss, + input spi_sck, + input spi_mosi, + output spi_miso, + + output reg [15:0] pcm_l, + output reg [15:0] pcm_r +); + +reg [60:0] buf_info; +reg [6:0] spicnt = 0; +always @(posedge spi_sck, posedge spi_ss) begin + reg [95:0] spi_data; + + if(spi_ss) spicnt <= 0; + else begin + spi_data[{spicnt[6:3],~spicnt[2:0]}] <= spi_mosi; + if(&spicnt) buf_info <= {spi_data[82:67],spi_data[50:35],spi_data[31:3]}; + spicnt <= spicnt + 1'd1; + end +end + +assign spi_miso = spi_out[{spicnt[4:3],~spicnt[2:0]}]; + +reg [31:0] spi_out = 0; +always @(posedge clk) if(spi_ss) spi_out <= {buf_rptr, hurryup, 8'h00}; + + +reg [31:3] buf_addr; +reg [18:3] buf_len; +reg [18:3] buf_wptr = 0; + +always @(posedge clk) begin + reg [60:0] data1,data2; + + data1 <= buf_info; + data2 <= data1; + if(data2 == data1) {buf_wptr,buf_len,buf_addr} <= data2; +end + +reg [2:0] hurryup = 0; +reg [18:3] buf_rptr = 0; + +always @(posedge clk) begin + reg [18:3] len = 0; + reg [1:0] ready = 0; + reg [63:0] readdata; + reg got_first = 0; + reg [7:0] ce_cnt = 0; + reg [1:0] state = 0; + + if(reset) begin + ready <= 0; + ce_cnt <= 0; + state <= 0; + got_first <= 0; + len <= 0; + end + else begin + + //ramp up + if(len[18:14] && (hurryup < 1)) hurryup <= 1; + if(len[18:16] && (hurryup < 2)) hurryup <= 2; + if(len[18:17] && (hurryup < 4)) hurryup <= 4; + + //ramp down + if(!len[18:15] && (hurryup > 2)) hurryup <= 2; + if(!len[18:13] && (hurryup > 1)) hurryup <= 1; + if(!len[18:10]) hurryup <= 0; + + if(ce_sample && ~&ce_cnt) ce_cnt <= ce_cnt + 1'd1; + + case(state) + 0: if(!ce_sample) begin + if(ready) begin + if(ce_cnt) begin + {readdata[31:0],pcm_r,pcm_l} <= readdata; + ready <= ready - 1'd1; + ce_cnt <= ce_cnt - 1'd1; + end + end + else if(buf_rptr != buf_wptr) begin + if(~got_first) begin + buf_rptr <= buf_wptr; + got_first <= 1; + end + else begin + ram_address <= buf_addr + buf_rptr; + ram_req <= ~ram_req; + buf_rptr <= buf_rptr + 1'd1; + len <= (buf_wptr < buf_rptr) ? (buf_len + buf_wptr - buf_rptr) : (buf_wptr - buf_rptr); + state <= 1; + end + end + else begin + len <= 0; + ce_cnt <= 0; + hurryup <= 0; + end + end + 1: if(ram_ready) begin + ready <= 2; + readdata <= ram_data; + if(buf_rptr >= buf_len) buf_rptr <= buf_rptr - buf_len; + state <= 0; + end + endcase + end +end + +reg ce_sample; +always @(posedge clk) begin + reg [31:0] acc = 0; + + ce_sample <= 0; + acc <= acc + 48000 + {hurryup,6'd0}; + if(acc >= CLK_RATE) begin + acc <= acc - CLK_RATE; + ce_sample <= 1; + end +end + +endmodule diff --git a/sys/arcade_video.v b/sys/arcade_video.v new file mode 100644 index 0000000..e47a150 --- /dev/null +++ b/sys/arcade_video.v @@ -0,0 +1,302 @@ +//============================================================================ +// +// Copyright (C) 2017-2020 Sorgelig +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +////////////////////////////////////////////////////////// +// DW: +// 6 : 2R 2G 2B +// 8 : 3R 3G 2B +// 9 : 3R 3G 3B +// 12 : 4R 4G 4B +// 24 : 8R 8G 8B + +module arcade_video #(parameter WIDTH=320, DW=8, GAMMA=1) +( + input clk_video, + input ce_pix, + + input[DW-1:0] RGB_in, + input HBlank, + input VBlank, + input HSync, + input VSync, + + output CLK_VIDEO, + output CE_PIXEL, + output [7:0] VGA_R, + output [7:0] VGA_G, + output [7:0] VGA_B, + output VGA_HS, + output VGA_VS, + output VGA_DE, + output [1:0] VGA_SL, + + input [2:0] fx, + input forced_scandoubler, + inout [21:0] gamma_bus +); + +assign CLK_VIDEO = clk_video; + +wire hs_fix,vs_fix; +sync_fix sync_v(CLK_VIDEO, HSync, hs_fix); +sync_fix sync_h(CLK_VIDEO, VSync, vs_fix); + +reg [DW-1:0] RGB_fix; + +reg CE,HS,VS,HBL,VBL; +always @(posedge CLK_VIDEO) begin + reg old_ce; + old_ce <= ce_pix; + CE <= 0; + if(~old_ce & ce_pix) begin + CE <= 1; + HS <= hs_fix; + if(~HS & hs_fix) VS <= vs_fix; + + RGB_fix <= RGB_in; + HBL <= HBlank; + if(HBL & ~HBlank) VBL <= VBlank; + end +end + +wire [7:0] R,G,B; + +generate + if(DW == 6) begin + assign R = {RGB_fix[5:4],RGB_fix[5:4],RGB_fix[5:4],RGB_fix[5:4]}; + assign G = {RGB_fix[3:2],RGB_fix[3:2],RGB_fix[3:2],RGB_fix[3:2]}; + assign B = {RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0]}; + end + else if(DW == 8) begin + assign R = {RGB_fix[7:5],RGB_fix[7:5],RGB_fix[7:6]}; + assign G = {RGB_fix[4:2],RGB_fix[4:2],RGB_fix[4:3]}; + assign B = {RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0],RGB_fix[1:0]}; + end + else if(DW == 9) begin + assign R = {RGB_fix[8:6],RGB_fix[8:6],RGB_fix[8:7]}; + assign G = {RGB_fix[5:3],RGB_fix[5:3],RGB_fix[5:4]}; + assign B = {RGB_fix[2:0],RGB_fix[2:0],RGB_fix[2:1]}; + end + else if(DW == 12) begin + assign R = {RGB_fix[11:8],RGB_fix[11:8]}; + assign G = {RGB_fix[7:4],RGB_fix[7:4]}; + assign B = {RGB_fix[3:0],RGB_fix[3:0]}; + end + else begin // 24 + assign R = RGB_fix[23:16]; + assign G = RGB_fix[15:8]; + assign B = RGB_fix[7:0]; + end +endgenerate + +assign VGA_SL = sl[1:0]; +wire [2:0] sl = fx ? fx - 1'd1 : 3'd0; +wire scandoubler = fx || forced_scandoubler; + +video_mixer #(.LINE_LENGTH(WIDTH+4), .HALF_DEPTH(DW!=24), .GAMMA(GAMMA)) video_mixer +( + .CLK_VIDEO(CLK_VIDEO), + .ce_pix(CE), + .CE_PIXEL(CE_PIXEL), + + .scandoubler(scandoubler), + .hq2x(fx==1), + .gamma_bus(gamma_bus), + + .R((DW!=24) ? R[7:4] : R), + .G((DW!=24) ? G[7:4] : G), + .B((DW!=24) ? B[7:4] : B), + + .HSync (HS), + .VSync (VS), + .HBlank(HBL), + .VBlank(VBL), + + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .VGA_DE(VGA_DE) +); + +endmodule + +//============================================================================ +// +// Screen +90/-90 deg. rotation +// Copyright (C) 2020 Sorgelig +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + +module screen_rotate +( + input CLK_VIDEO, + input CE_PIXEL, + + input [7:0] VGA_R, + input [7:0] VGA_G, + input [7:0] VGA_B, + input VGA_HS, + input VGA_VS, + input VGA_DE, + + input rotate_ccw, + input no_rotate, + + output FB_EN, + output [4:0] FB_FORMAT, + output [11:0] FB_WIDTH, + output [11:0] FB_HEIGHT, + output [31:0] FB_BASE, + output [13:0] FB_STRIDE, + input FB_VBL, + input FB_LL, + + output DDRAM_CLK, + input DDRAM_BUSY, + output [7:0] DDRAM_BURSTCNT, + output [28:0] DDRAM_ADDR, + output [63:0] DDRAM_DIN, + output [7:0] DDRAM_BE, + output DDRAM_WE, + output DDRAM_RD +); + +parameter MEM_BASE = 7'b0010010; // buffer at 0x24000000, 3x8MB + +assign DDRAM_CLK = CLK_VIDEO; +assign DDRAM_BURSTCNT = 1; +assign DDRAM_ADDR = {MEM_BASE, i_fb, ram_addr[22:3]}; +assign DDRAM_BE = ram_addr[2] ? 8'hF0 : 8'h0F; +assign DDRAM_DIN = {ram_data,ram_data}; +assign DDRAM_WE = ram_wr; +assign DDRAM_RD = 0; + +assign FB_EN = fb_en[2]; +assign FB_FORMAT = 5'b00110; +assign FB_BASE = {MEM_BASE,o_fb,23'd0}; +assign FB_WIDTH = vsz; +assign FB_HEIGHT = hsz; +assign FB_STRIDE = stride; + +function [1:0] buf_next; + input [1:0] a,b; + begin + buf_next = 1; + if ((a==0 && b==1) || (a==1 && b==0)) buf_next = 2; + if ((a==1 && b==2) || (a==2 && b==1)) buf_next = 0; + end +endfunction + +reg [1:0] i_fb,o_fb; +always @(posedge CLK_VIDEO) begin + reg old_vbl,old_vs; + old_vbl <= FB_VBL; + old_vs <= VGA_VS; + + if(FB_LL) begin + if(~old_vbl & FB_VBL) o_fb<={1'b0,~i_fb[0]}; + if(~old_vs & VGA_VS) i_fb<={1'b0,~i_fb[0]}; + end + else begin + if(~old_vbl & FB_VBL) o_fb<=buf_next(o_fb,i_fb); + if(~old_vs & VGA_VS) i_fb<=buf_next(i_fb,o_fb); + end +end + +initial begin + fb_en = 0; +end + +reg [2:0] fb_en = 0; +reg [11:0] hsz = 320, vsz = 240; +reg [11:0] bwidth; +reg [22:0] bufsize; +always @(posedge CLK_VIDEO) begin + reg [11:0] hcnt = 0, vcnt = 0; + reg old_vs, old_de; + + if(CE_PIXEL) begin + old_vs <= VGA_VS; + old_de <= VGA_DE; + + hcnt <= hcnt + 1'd1; + if(~old_de & VGA_DE) begin + hcnt <= 1; + vcnt <= vcnt + 1'd1; + end + if(old_de & ~VGA_DE) hsz <= hcnt; + if(~old_vs & VGA_VS) begin + vsz <= vcnt; + bwidth <= vcnt + 2'd3; + vcnt <= 0; + fb_en <= {fb_en[1:0], ~no_rotate}; + end + if(old_vs & ~VGA_VS) bufsize <= hsz * stride; + end +end + +wire [13:0] stride = {bwidth[11:2], 4'd0}; + +reg [22:0] ram_addr, next_addr; +reg [31:0] ram_data; +reg ram_wr; +always @(posedge CLK_VIDEO) begin + reg [13:0] hcnt = 0; + reg old_vs, old_de; + + ram_wr <= 0; + if(CE_PIXEL) begin + old_vs <= VGA_VS; + old_de <= VGA_DE; + + if(~old_vs & VGA_VS) begin + next_addr <= rotate_ccw ? (bufsize - stride) : {vsz-1'd1, 2'b00}; + hcnt <= rotate_ccw ? 3'd4 : {vsz-2'd2, 2'b00}; + end + if(VGA_DE) begin + ram_wr <= 1; + ram_data <= {VGA_B,VGA_G,VGA_R}; + ram_addr <= next_addr; + next_addr <= rotate_ccw ? (next_addr - stride) : (next_addr + stride); + end + if(old_de & ~VGA_DE) begin + next_addr <= rotate_ccw ? (bufsize - stride + hcnt) : hcnt; + hcnt <= rotate_ccw ? (hcnt + 3'd4) : (hcnt - 3'd4); + end + end +end + +endmodule diff --git a/sys/ascal.vhd b/sys/ascal.vhd new file mode 100644 index 0000000..188d280 --- /dev/null +++ b/sys/ascal.vhd @@ -0,0 +1,2564 @@ +-------------------------------------------------------------------------------- +-- AVALON SCALER +-------------------------------------------------------------------------------- +-- TEMLIB 2018 - 2020 +-------------------------------------------------------------------------------- +-- This code can be freely distributed and used for any purpose, but, if you +-- find any bug, or want to suggest an enhancement, you ought to send a mail +-- to info@temlib.org. +-------------------------------------------------------------------------------- + +-- Features +-- - Arbitrary output video format +-- - Autodetect input image size or fixed window +-- - Progressive and interlaced input +-- - Interpolation +-- Upscaling : Nearest, Bilinear, Sharp Bilinear, Bicubic, Polyphase +-- Downscaling : Nearest, Bilinear +-- - Avalon bus interface with 128 or 64 bits DATA +-- - Optional triple buffering +-- - Support for external low lag syntonization + +-------------------------------------------- +-- Downscaling +-- - Horizontal and vertical up-/down-scaling are independant. +-- - Downscaling, H and/or V, supports only nearest-neighbour and bilinear +-- filtering. +-- - For interlaced video, when the vertical size is lower than a deinterlaced +-- frame size (2x half-frame), the scaler processes only half-frames +-- and upscales (when the output size is between 1x an 2x) or downscales (size +-- below 1x) them. + +-------------------------------------------- +-- 5 clock domains +-- i_xxx : Input video +-- o_xxx : Output video +-- avl_xxx : Avalon memory bus +-- poly_xxx : Polyphase filters memory +-- pal_xxx : Framebuffer mode 8bpp palette. + +-------------------------------------------- +-- O_FB_FORMAT : Framebuffer format +-- [2:0] : 011=8bpp(palette) 100=16bpp 101=24bpp 110=32bpp +-- [3] : 0=16bits 565 1=16bits 1555 +-- [4] : 0=RGB 1=BGR (for 16/24/32 modes) +-- [5] : TBD + +-------------------------------------------- +-- Image header. When HEADER = TRUE +-- Header Address = RAMBASE +-- Image Address = RAMBASE + HEADER_SIZE + +-- Header (Bytes. Big Endian.) +-- 0 : Type = 1 +-- 1 : Pixel format +-- 0 : 16 bits/pixel, RGB : RRRRRGGGGGGBBBBB +-- 1 : 24 bits/pixel, RGB +-- 2 : 32 bits/pixel, RGB0 + +-- 3:2 : Header size : Offset to start of picture (= N_BURST). 12 bits +-- 5:4 : Attributes +-- b0 ; Interlaced +-- b1 : Field number +-- b2 : Horizontal downscaled +-- b3 : Vertical downscaled +-- b4 : Triple buffered +-- b7-5 : Frame counter +-- 7:6 : Image width. Pixels. 12 bits +-- 9:8 : Image height. Pixels. 12 bits +-- 11:10 : Line length. Bytes. +-- 13:12 : Output width. Pixels. 12 bits +-- 15:14 : Output height. Pixels. 12 bits +-------------------------------------------- + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +-- MODE[2:0] +-- 000 : Nearest +-- 001 : Bilinear +-- 010 : Sharp Bilinear +-- 011 : Bicubic +-- 100 : Polyphase +-- 101 : TBD +-- 110 : TBD +-- 111 : TBD + +-- MODE[3] +-- 0 : Direct. Single framebuffer. +-- 1 : Triple buffering + +-- MODE[4] : TBD + +-- MASK : Enable / Disable selected interpoler +-- 0:Nearest 1:Bilinear 2:SharpBilinear 3:Bicubic 4:Polyphase +-- RAMBASE : RAM base address for framebuffer +-- RAMSIZE : RAM allocated for one framebuffer (needs x3 if triple-buffering) +-- Must be a power of two +-- INTER : True=Autodetect interlaced video False=Force progressive scan +-- HEADER : True=Add image properties header +-- PALETTE : Enable palette for framebuffer 8bpp mode +-- PALETTE2 : Enable palette for framebuffer 8bpp mode supplied by core +-- DOWNSCALE : True=Support downscaling False=Downscaling disabled +-- BYTESWAP : Little/Big endian byte swap +-- FRAC : Fractional bits, subpixel resolution +-- OHRES : Max. output horizontal resolution. Must be a power of two. +-- (Used for sizing line buffers) +-- IHRES : Max. input horizontal resolution. Must be a power of two. +-- (Used for sizing line buffers) +-- N_DW : Avalon data bus width. 64 or 128 bits +-- N_AW : Avalon address bus width +-- N_BURST : Burst size in bytes. Power of two. + +ENTITY ascal IS + GENERIC ( + MASK : unsigned(7 DOWNTO 0) :=x"FF"; + RAMBASE : unsigned(31 DOWNTO 0); + RAMSIZE : unsigned(31 DOWNTO 0) := x"0080_0000"; -- =8MB + INTER : boolean := true; + HEADER : boolean := true; + DOWNSCALE : boolean := true; + BYTESWAP : boolean := true; + PALETTE : boolean := true; + PALETTE2 : boolean := true; + FRAC : natural RANGE 4 TO 6 :=4; + OHRES : natural RANGE 1 TO 4096 :=2048; + IHRES : natural RANGE 1 TO 2048 :=2048; + N_DW : natural RANGE 64 TO 128 := 128; + N_AW : natural RANGE 8 TO 32 := 32; + N_BURST : natural := 256 -- 256 bytes per burst + ); + PORT ( + ------------------------------------ + -- Input video + i_r : IN unsigned(7 DOWNTO 0); + i_g : IN unsigned(7 DOWNTO 0); + i_b : IN unsigned(7 DOWNTO 0); + i_hs : IN std_logic; -- H sync + i_vs : IN std_logic; -- V sync + i_fl : IN std_logic; -- Interlaced field + i_de : IN std_logic; -- Display Enable + i_ce : IN std_logic; -- Clock Enable + i_clk : IN std_logic; -- Input clock + + ------------------------------------ + -- Output video + o_r : OUT unsigned(7 DOWNTO 0); + o_g : OUT unsigned(7 DOWNTO 0); + o_b : OUT unsigned(7 DOWNTO 0); + o_hs : OUT std_logic; -- H sync + o_vs : OUT std_logic; -- V sync + o_de : OUT std_logic; -- Display Enable + o_vbl : OUT std_logic; -- V blank + o_ce : IN std_logic; -- Clock Enable + o_clk : IN std_logic; -- Output clock + + -- Border colour R G B + o_border : IN unsigned(23 DOWNTO 0) := x"000000"; + + ------------------------------------ + -- Framebuffer mode + o_fb_ena : IN std_logic :='0'; -- Enable Framebuffer Mode + o_fb_hsize : IN natural RANGE 0 TO 4095 :=0; + o_fb_vsize : IN natural RANGE 0 TO 4095 :=0; + o_fb_format : IN unsigned(5 DOWNTO 0) :="000100"; + o_fb_base : IN unsigned(31 DOWNTO 0) :=x"0000_0000"; + o_fb_stride : IN unsigned(13 DOWNTO 0) :=(OTHERS =>'0'); + + -- Framebuffer palette in 8bpp mode + pal1_clk : IN std_logic :='0'; + pal1_dw : IN unsigned(47 DOWNTO 0) :=x"000000000000"; -- R1 G1 B1 R0 G0 B0 + pal1_dr : OUT unsigned(47 DOWNTO 0) :=x"000000000000"; + pal1_a : IN unsigned(6 DOWNTO 0) :="0000000"; -- Colour index/2 + pal1_wr : IN std_logic :='0'; + + pal_n : IN std_logic :='0'; + + pal2_clk : IN std_logic :='0'; + pal2_dw : IN unsigned(23 DOWNTO 0) :=x"000000"; -- R G B + pal2_dr : OUT unsigned(23 DOWNTO 0) :=x"000000"; + pal2_a : IN unsigned(7 DOWNTO 0) :="00000000"; -- Colour index + pal2_wr : IN std_logic :='0'; + + ------------------------------------ + -- Low lag PLL tuning + o_lltune : OUT unsigned(15 DOWNTO 0); + + ------------------------------------ + -- Input video parameters + iauto : IN std_logic :='1'; -- 1=Autodetect image size 0=Choose window + himin : IN natural RANGE 0 TO 4095 :=0; -- MIN < MAX, MIN >=0, MAX < DISP + himax : IN natural RANGE 0 TO 4095 :=0; + vimin : IN natural RANGE 0 TO 4095 :=0; + vimax : IN natural RANGE 0 TO 4095 :=0; + + -- Detected input image size + i_hdmax : OUT natural RANGE 0 TO 4095; + i_vdmax : OUT natural RANGE 0 TO 4095; + + -- Output video parameters + run : IN std_logic :='1'; -- 1=Enable output image. 0=No image + freeze : IN std_logic :='0'; -- 1=Disable framebuffer writes + mode : IN unsigned(4 DOWNTO 0); + -- SYNC |_________________________/"""""""""\_______| + -- DE |""""""""""""""""""\________________________| + -- RGB | <#IMAGE#> ^HDISP | + -- ^HMIN ^HMAX ^HSSTART ^HSEND ^HTOTAL + htotal : IN natural RANGE 0 TO 4095; + hsstart : IN natural RANGE 0 TO 4095; + hsend : IN natural RANGE 0 TO 4095; + hdisp : IN natural RANGE 0 TO 4095; + hmin : IN natural RANGE 0 TO 4095; + hmax : IN natural RANGE 0 TO 4095; -- 0 <= hmin < hmax < hdisp + vtotal : IN natural RANGE 0 TO 4095; + vsstart : IN natural RANGE 0 TO 4095; + vsend : IN natural RANGE 0 TO 4095; + vdisp : IN natural RANGE 0 TO 4095; + vmin : IN natural RANGE 0 TO 4095; + vmax : IN natural RANGE 0 TO 4095; -- 0 <= vmin < vmax < vdisp + + -- Scaler format. 00=16bpp 565, 01=24bpp 10=32bpp + format : IN unsigned(1 DOWNTO 0) :="01"; + + ------------------------------------ + -- Polyphase filter coefficients + -- Order : + -- [Horizontal] [Vertical] + -- [0]...[2**FRAC-1] + -- [-1][0][1][2] + poly_clk : IN std_logic; + poly_dw : IN unsigned(8 DOWNTO 0); + poly_a : IN unsigned(FRAC+2 DOWNTO 0); + poly_wr : IN std_logic; + + ------------------------------------ + -- Avalon + avl_clk : IN std_logic; -- Avalon clock + avl_waitrequest : IN std_logic; + avl_readdata : IN std_logic_vector(N_DW-1 DOWNTO 0); + avl_readdatavalid : IN std_logic; + avl_burstcount : OUT std_logic_vector(7 DOWNTO 0); + avl_writedata : OUT std_logic_vector(N_DW-1 DOWNTO 0); + avl_address : OUT std_logic_vector(N_AW-1 DOWNTO 0); + avl_write : OUT std_logic; + avl_read : OUT std_logic; + avl_byteenable : OUT std_logic_vector(N_DW/8-1 DOWNTO 0); + + ------------------------------------ + reset_na : IN std_logic + ); + +BEGIN + ASSERT N_DW=64 OR N_DW=128 REPORT "DW" SEVERITY failure; + +END ENTITY ascal; + +--############################################################################## + +ARCHITECTURE rtl OF ascal IS + + CONSTANT MASK_NEAREST : natural :=0; + CONSTANT MASK_BILINEAR : natural :=1; + CONSTANT MASK_SHARP_BILINEAR : natural :=2; + CONSTANT MASK_BICUBIC : natural :=3; + CONSTANT MASK_POLY : natural :=4; + + ---------------------------------------------------------- + FUNCTION ilog2 (CONSTANT v : natural) RETURN natural IS + VARIABLE r : natural := 1; + VARIABLE n : natural := 0; + BEGIN + WHILE v>r LOOP + n:=n+1; + r:=r*2; + END LOOP; + RETURN n; + END FUNCTION ilog2; + FUNCTION to_std_logic (a : boolean) RETURN std_logic IS + BEGIN + IF a THEN RETURN '1'; + ELSE RETURN '0'; + END IF; + END FUNCTION to_std_logic; + + ---------------------------------------------------------- + CONSTANT NB_BURST : natural :=ilog2(N_BURST); + CONSTANT NB_LA : natural :=ilog2(N_DW/8); -- Low address bits + CONSTANT BLEN : natural :=N_BURST / N_DW * 8; -- Burst length + + ---------------------------------------------------------- + TYPE arr_dw IS ARRAY (natural RANGE <>) OF unsigned(N_DW-1 DOWNTO 0); + + TYPE type_pix IS RECORD + r,g,b : unsigned(7 DOWNTO 0); -- 0.8 + END RECORD; + TYPE arr_pix IS ARRAY (natural RANGE <>) OF type_pix; + ATTRIBUTE ramstyle : string; + + SUBTYPE uint12 IS natural RANGE 0 TO 4095; + SUBTYPE uint13 IS natural RANGE 0 TO 8191; + + TYPE arr_uv48 IS ARRAY (natural RANGE <>) OF unsigned(47 DOWNTO 0); + TYPE arr_uv24 IS ARRAY (natural RANGE <>) OF unsigned(23 DOWNTO 0); + TYPE arr_uv36 IS ARRAY (natural RANGE <>) OF unsigned(35 DOWNTO 0); + TYPE arr_int9 IS ARRAY (natural RANGE <>) OF integer RANGE -256 TO 255; + TYPE arr_uint12 IS ARRAY (natural RANGE <>) OF uint12; + + ---------------------------------------------------------- + -- Input image + SIGNAL i_pvs,i_pfl,i_pde,i_pce : std_logic; + SIGNAL i_ppix : type_pix; + SIGNAL i_freeze : std_logic; + SIGNAL i_count : unsigned(2 DOWNTO 0); + SIGNAL i_hsize,i_hmin,i_hmax,i_hcpt : uint12; + SIGNAL i_hrsize,i_vrsize : uint12; + SIGNAL i_himax,i_vimax : uint12; + SIGNAL i_vsize,i_vmaxmin,i_vmin,i_vmax,i_vcpt : uint12; + SIGNAL i_iauto : std_logic; + SIGNAL i_mode : unsigned(4 DOWNTO 0); + SIGNAL i_format : unsigned(1 DOWNTO 0); + SIGNAL i_ven,i_sof : std_logic; + SIGNAL i_wr : std_logic; + SIGNAL i_divstart,i_divrun : std_logic; + SIGNAL i_de_pre,i_vs_pre,i_fl_pre : std_logic; + SIGNAL i_de_delay : natural RANGE 0 TO 31; + SIGNAL i_intercnt : natural RANGE 0 TO 3; + SIGNAL i_inter,i_half,i_flm : std_logic; + SIGNAL i_write,i_wreq,i_alt,i_line,i_wline,i_wline_mem : std_logic; + SIGNAL i_walt,i_walt_mem,i_wreq_mem : std_logic; + SIGNAL i_wdelay : natural RANGE 0 TO 7; + SIGNAL i_push,i_pushend,i_pushend2 : std_logic; + SIGNAL i_eol : std_logic; + SIGNAL i_pushhead,i_pushhead2,i_pushhead3 : std_logic; + SIGNAL i_hburst,i_hbcpt : natural RANGE 0 TO 31; + SIGNAL i_shift : unsigned(0 TO 119) := (OTHERS =>'0'); + SIGNAL i_head : unsigned(127 DOWNTO 0); + SIGNAL i_acpt : natural RANGE 0 TO 15; + SIGNAL i_dpram : arr_dw(0 TO BLEN*2-1); + ATTRIBUTE ramstyle OF i_dpram : SIGNAL IS "no_rw_check"; + SIGNAL i_endframe0,i_endframe1,i_vss : std_logic; + SIGNAL i_wad : natural RANGE 0 TO BLEN*2-1; + SIGNAL i_dw : unsigned(N_DW-1 DOWNTO 0); + SIGNAL i_adrs,i_adrsi,i_wadrs,i_wadrs_mem : unsigned(31 DOWNTO 0); + SIGNAL i_reset_na : std_logic; + SIGNAL i_hnp,i_vnp : std_logic; + SIGNAL i_mem : arr_pix(0 TO IHRES-1); -- Downscale line buffer + ATTRIBUTE ramstyle OF i_mem : SIGNAL IS "no_rw_check"; + SIGNAL i_ohsize,i_ovsize : uint12; + SIGNAL i_vdivi : unsigned(12 DOWNTO 0); + SIGNAL i_vdivr : unsigned(24 DOWNTO 0); + SIGNAL i_div : unsigned(16 DOWNTO 0); + SIGNAL i_dir : unsigned(11 DOWNTO 0); + SIGNAL i_h_frac,i_v_frac : unsigned(11 DOWNTO 0); + SIGNAL i_hacc,i_vacc : uint13; + SIGNAL i_hdown,i_vdown : std_logic; + SIGNAL i_divcpt : natural RANGE 0 TO 36; + SIGNAL i_lwad,i_lrad : natural RANGE 0 TO OHRES-1; + SIGNAL i_lwr,i_bil : std_logic; + SIGNAL i_ldw,i_ldrm : type_pix; + SIGNAL i_hpixp,i_hpix0,i_hpix1,i_hpix2,i_hpix3,i_hpix4 : type_pix; + SIGNAL i_hpix,i_pix : type_pix; + SIGNAL i_hnp1,i_hnp2,i_hnp3,i_hnp4 : std_logic; + SIGNAL i_ven1,i_ven2,i_ven3,i_ven4,i_ven5,i_ven6 : std_logic; + + ---------------------------------------------------------- + -- Avalon + TYPE type_avl_state IS (sIDLE,sWRITE,sREAD); + SIGNAL avl_state : type_avl_state; + SIGNAL avl_write_i,avl_write_sync,avl_write_sync2 : std_logic; + SIGNAL avl_read_i,avl_read_sync,avl_read_sync2 : std_logic; + SIGNAL avl_read_pulse,avl_write_pulse : std_logic; + SIGNAL avl_read_sr,avl_write_sr,avl_read_clr,avl_write_clr : std_logic; + SIGNAL avl_rad,avl_rad_c,avl_wad : natural RANGE 0 TO 2*BLEN-1; + SIGNAL avl_walt,avl_wline,avl_rline : std_logic; + SIGNAL avl_dw,avl_dr : unsigned(N_DW-1 DOWNTO 0); + SIGNAL avl_wr : std_logic; + SIGNAL avl_readdataack,avl_readack : std_logic; + SIGNAL avl_radrs,avl_wadrs : unsigned(31 DOWNTO 0); + SIGNAL avl_i_offset0,avl_o_offset0 : unsigned(31 DOWNTO 0); + SIGNAL avl_i_offset1,avl_o_offset1 : unsigned(31 DOWNTO 0); + SIGNAL avl_reset_na : std_logic; + SIGNAL avl_o_vs_sync,avl_o_vs : std_logic; + SIGNAL avl_fb_ena : std_logic; + + FUNCTION buf_next(a,b : natural RANGE 0 TO 2; freeze : std_logic := '0') RETURN natural IS + BEGIN + IF (freeze='1') THEN RETURN a; END IF; + IF (a=0 AND b=1) OR (a=1 AND b=0) THEN RETURN 2; END IF; + IF (a=1 AND b=2) OR (a=2 AND b=1) THEN RETURN 0; END IF; + RETURN 1; + END FUNCTION; + FUNCTION buf_offset(b : natural RANGE 0 TO 2; + base : unsigned(31 DOWNTO 0); + size : unsigned(31 DOWNTO 0)) RETURN unsigned IS + BEGIN + IF b=1 THEN RETURN base+size; END IF; + IF b=2 THEN RETURN base+(size(30 DOWNTO 0) & '0'); END IF; + RETURN base; + END FUNCTION; + + ---------------------------------------------------------- + -- Output + SIGNAL o_run : std_logic; + SIGNAL o_freeze : std_logic; + SIGNAL o_mode,o_hmode,o_vmode : unsigned(4 DOWNTO 0); + SIGNAL o_format : unsigned(5 DOWNTO 0); + SIGNAL o_fb_pal_dr : unsigned(23 DOWNTO 0); + SIGNAL o_fb_pal_dr2 : unsigned(23 DOWNTO 0); + SIGNAL o_fb_pal_dr_x2 : unsigned(47 DOWNTO 0); + SIGNAL pal_idx: unsigned(7 DOWNTO 0); + SIGNAL pal_idx_lsb: std_logic; + SIGNAL pal1_mem : arr_uv48(0 TO 127); + SIGNAL pal2_mem : arr_uv24(0 TO 255); + ATTRIBUTE ramstyle of pal1_mem : signal is "no_rw_check"; + ATTRIBUTE ramstyle of pal2_mem : signal is "no_rw_check"; + SIGNAL o_htotal,o_hsstart,o_hsend : uint12; + SIGNAL o_hmin,o_hmax,o_hdisp : uint12; + SIGNAL o_hsize,o_vsize : uint12; + SIGNAL o_vtotal,o_vsstart,o_vsend : uint12; + SIGNAL o_vmin,o_vmax,o_vdisp : uint12; + SIGNAL o_divcpt : natural RANGE 0 TO 36; + SIGNAL o_iendframe0,o_iendframe02,o_iendframe1,o_iendframe12 : std_logic; + SIGNAL o_bufup0,o_bufup1,o_inter : std_logic; + SIGNAL o_ibuf0,o_ibuf1,o_obuf0,o_obuf1 : natural RANGE 0 TO 2; + TYPE enum_o_state IS (sDISP,sHSYNC,sREAD,sWAITREAD); + SIGNAL o_state : enum_o_state; + TYPE enum_o_copy IS (sWAIT,sSHIFT,sCOPY); + SIGNAL o_copy : enum_o_copy; + SIGNAL o_pshift : natural RANGE 0 TO 15; + SIGNAL o_readack,o_readack_sync,o_readack_sync2 : std_logic; + SIGNAL o_readdataack,o_readdataack_sync,o_readdataack_sync2 : std_logic; + SIGNAL o_copyv : unsigned(0 TO 8); + SIGNAL o_adrs : unsigned(31 DOWNTO 0); -- Avalon address + SIGNAL o_adrs_pre : natural RANGE 0 TO 2**24-1; + SIGNAL o_stride : unsigned(13 DOWNTO 0); + SIGNAL o_adrsa,o_adrsb,o_rline : std_logic; + SIGNAL o_ad,o_ad1,o_ad2,o_ad3 : natural RANGE 0 TO 2*BLEN-1; + SIGNAL o_adturn : std_logic; + SIGNAL o_dr : unsigned(N_DW-1 DOWNTO 0); + SIGNAL o_shift : unsigned(0 TO N_DW+15); + SIGNAL o_sh,o_sh1,o_sh2,o_sh3,o_sh4 : std_logic; + SIGNAL o_reset_na : std_logic; + SIGNAL o_dpram : arr_dw(0 TO BLEN*2-1); + ATTRIBUTE ramstyle OF o_dpram : SIGNAL IS "no_rw_check"; + SIGNAL o_line0,o_line1,o_line2,o_line3 : arr_pix(0 TO OHRES-1); + ATTRIBUTE ramstyle OF o_line0 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line1 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line2 : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_line3 : SIGNAL IS "no_rw_check"; + SIGNAL o_wadl,o_radl : natural RANGE 0 TO OHRES-1; + SIGNAL o_ldw,o_ldr0,o_ldr1,o_ldr2,o_ldr3 : type_pix; + SIGNAL o_wr : unsigned(3 DOWNTO 0); + SIGNAL o_hcpt,o_vcpt,o_vcpt_pre,o_vcpt_pre2,o_vcpt_pre3 : uint12; + SIGNAL o_ihsize,o_ihsizem,o_ivsize : uint12; + SIGNAL o_ihsize_temp, o_ihsize_temp2 : natural RANGE 0 TO 32767; + + SIGNAL o_vfrac,o_hfrac,o_hfrac1,o_hfrac2,o_hfrac3,o_hfrac4 : unsigned(11 DOWNTO 0); + SIGNAL o_hacc,o_hacc_ini,o_hacc_next,o_vacc,o_vacc_next,o_vacc_ini : natural RANGE 0 TO 4*OHRES-1; + SIGNAL o_hsv,o_vsv,o_dev,o_pev,o_end : unsigned(0 TO 5); + SIGNAL o_hsp,o_vss : std_logic; + SIGNAL o_read,o_read_pre : std_logic; + SIGNAL o_readlev,o_copylev : natural RANGE 0 TO 2; + SIGNAL o_hburst,o_hbcpt : natural RANGE 0 TO 31; + SIGNAL o_fload : natural RANGE 0 TO 3; + SIGNAL o_acpt,o_acpt1,o_acpt2,o_acpt3,o_acpt4 : natural RANGE 0 TO 15; -- Alternance pixels FIFO + SIGNAL o_dshi : natural RANGE 0 TO 3; + SIGNAL o_first,o_last,o_last1,o_last2 : std_logic; + SIGNAL o_lastt1,o_lastt2,o_lastt3,o_lastt4 : std_logic; + SIGNAL o_alt,o_altx : unsigned(3 DOWNTO 0); + SIGNAL o_hdown,o_vdown : std_logic; + SIGNAL o_primv,o_lastv,o_bibv : unsigned(0 TO 2); + TYPE arr_uint4 IS ARRAY (natural RANGE <>) OF natural RANGE 0 TO 15; + SIGNAL o_off : arr_uint4(0 TO 2); + SIGNAL o_bibu : std_logic :='0'; + SIGNAL o_dcptv : arr_uint12(1 TO 8); + SIGNAL o_dcpt : uint12; + SIGNAL o_hpixs,o_hpix0,o_hpix1,o_hpix2,o_hpix3 : type_pix; + SIGNAL o_hpixq,o_vpixq,o_vpixq1 : arr_pix(0 TO 3); + + SIGNAL o_vpe : std_logic; + SIGNAL o_div,o_div2 : unsigned(18 DOWNTO 0); --uint12; + SIGNAL o_dir,o_dir2 : unsigned(11 DOWNTO 0); + SIGNAL o_vdivi : unsigned(12 DOWNTO 0); + SIGNAL o_vdivr : unsigned(24 DOWNTO 0); + SIGNAL o_divstart : std_logic; + SIGNAL o_divrun : std_logic; + SIGNAL o_hacpt,o_vacpt : unsigned(11 DOWNTO 0); + + ----------------------------------------------------------------------------- + FUNCTION shift_ishift(shift : unsigned(0 TO 119); + pix : type_pix; + format : unsigned(1 DOWNTO 0)) RETURN unsigned IS + BEGIN + CASE format IS + WHEN "01" => -- 24bpp + RETURN shift(24 TO 119) & pix.r & pix.g & pix.b; + WHEN "10" => -- 32bpp + RETURN shift(32 TO 119) & pix.r & pix.g & pix.b & x"00"; + WHEN OTHERS => -- 16bpp 565 + RETURN shift(16 TO 119) & + pix.g(4 DOWNTO 2) & pix.r(7 DOWNTO 3) & + pix.b(7 DOWNTO 3) & pix.g(7 DOWNTO 5); + END CASE; + END FUNCTION; + + FUNCTION shift_ipack(i_dw : unsigned(N_DW-1 DOWNTO 0); + acpt : natural RANGE 0 TO 15; + shift : unsigned(0 TO 119); + pix : type_pix; + format : unsigned(1 DOWNTO 0)) RETURN unsigned IS + VARIABLE dw : unsigned(N_DW-1 DOWNTO 0); + BEGIN + dw:=i_dw; + CASE format IS + WHEN "01" => -- 24bpp + IF N_DW=128 THEN + IF acpt=5 THEN dw:=shift(0 TO 119) & pix.r; + ELSIF acpt=10 THEN dw:=shift(8 TO 119) & pix.r & pix.g; + ELSIF acpt=15 THEN dw:=shift(16 TO 119) & pix.r & pix.g & pix.b; + END IF; + ELSE -- N_DW=64 + IF (acpt MOD 8)=2 THEN dw:=shift(72 TO 119) & pix.r & pix.g; + ELSIF (acpt MOD 8)=5 THEN dw:=shift(64 TO 119) & pix.r; + ELSIF (acpt MOD 8)=7 THEN dw:=shift(80 TO 119) & pix.r & pix.g & pix.b; + END IF; + END IF; + WHEN "10" => -- 32bpp + IF (N_DW=128 AND (acpt MOD 4)=3) OR (N_DW=64 AND (acpt MOD 8)=7) THEN + dw:=shift(128-N_DW+24 TO 119) & pix.r & pix.g & pix.b & x"00"; + END IF; + WHEN OTHERS => -- 16bpp 565 + IF (N_DW=128 AND (acpt MOD 8)=7) OR (N_DW=64 AND (acpt MOD 4)=3) THEN + dw:=shift(128-N_DW+8 TO 119) & pix.g(4 DOWNTO 2) & pix.r(7 DOWNTO 3) & + pix.b(7 DOWNTO 3) & pix.g(7 DOWNTO 5); + END IF; + END CASE; + RETURN dw; + END FUNCTION; + + FUNCTION shift_inext (acpt : natural RANGE 0 TO 15; + format : unsigned(1 DOWNTO 0)) RETURN boolean IS + BEGIN + CASE format IS + WHEN "01" => -- 24bpp + RETURN (N_DW=128 AND (acpt=5 OR acpt=10 OR acpt=15)) OR + (N_DW=64 AND ((acpt MOD 8)=2 OR (acpt MOD 8)=5 OR (acpt MOD 8)=7)); + WHEN "10" => -- 32bpp + RETURN (N_DW=128 AND ((acpt MOD 4)=3)) OR + (N_DW=64 AND ((acpt MOD 2)=1)); + WHEN OTHERS => -- 16bpp + RETURN (N_DW=128 AND ((acpt MOD 8)=7)) OR + (N_DW=64 AND ((acpt MOD 4)=3)); + END CASE; + END FUNCTION; + + FUNCTION shift_opack(acpt : natural RANGE 0 TO 15; + shift : unsigned(0 TO N_DW+15); + dr : unsigned(N_DW-1 DOWNTO 0); + format : unsigned(5 DOWNTO 0)) RETURN unsigned IS + VARIABLE shift_v : unsigned(0 TO N_DW+15); + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bpp + IF (N_DW=128 AND acpt=0) OR (N_DW=64 AND (acpt MOD 8)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(8 TO N_DW+15) & dr(7 DOWNTO 0); + END IF; + + WHEN "100" => -- 16bpp + IF (N_DW=128 AND (acpt MOD 8)=0) OR (N_DW=64 AND (acpt MOD 4)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(16 TO N_DW+15) & dr(15 DOWNTO 0); + END IF; + + WHEN "101" => -- 24bpp + IF N_DW=128 THEN + IF acpt=0 THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSIF acpt=5 THEN + shift_v:=shift(24 TO 31) & dr & dr(7 DOWNTO 0); + ELSIF acpt=10 THEN + shift_v:=shift(24 TO 39) & dr; + ELSE + shift_v:=shift(24 TO N_DW+15) & dr(23 DOWNTO 0); + END IF; + ELSE -- N_DW=64 + IF (acpt MOD 8)=0 THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSIF (acpt MOD 8)=2 THEN + shift_v:=shift(24 TO 39) & dr; + ELSIF (acpt MOD 8)=5 THEN + shift_v:=shift(24 TO 31) & dr & dr(7 DOWNTO 0); + ELSE + shift_v:=shift(24 TO N_DW+15) & dr(23 DOWNTO 0); + END IF; + END IF; + WHEN OTHERS => -- 32bpp + IF (N_DW=128 AND (acpt MOD 4)=0) OR (N_DW=64 AND (acpt MOD 2)=0) THEN + shift_v:=dr & dr(15 DOWNTO 0); + ELSE + shift_v:=shift(32 TO N_DW+15) & dr(31 DOWNTO 0); + END IF; + END CASE; + RETURN shift_v; + END FUNCTION; + + FUNCTION shift_onext (acpt : natural RANGE 0 TO 15; + format : unsigned(5 DOWNTO 0)) RETURN boolean IS + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bpp + RETURN (N_DW=128 AND acpt=0) OR + (N_DW=64 AND ((acpt MOD 8)=0)); + WHEN "100" => -- 16bpp + RETURN (N_DW=128 AND ((acpt MOD 8)=0)) OR + (N_DW=64 AND ((acpt MOD 4)=0)); + WHEN "101" => -- 24bpp + RETURN (N_DW=128 AND (acpt=0 OR acpt=5 OR acpt=10)) OR + (N_DW=64 AND ((acpt MOD 8)=0 OR (acpt MOD 8)=2 OR (acpt MOD 8)=5)); + WHEN OTHERS => -- 32bpp + RETURN (N_DW=128 AND ((acpt MOD 4)=0)) OR + (N_DW=64 AND ((acpt MOD 2)=0)); + END CASE; + END FUNCTION; + + FUNCTION shift_opix (shift : unsigned(0 TO N_DW+15); + format : unsigned(5 DOWNTO 0)) RETURN type_pix IS + BEGIN + CASE format(3 DOWNTO 0) IS + WHEN "0100" => -- 16bpp 565 + RETURN (b=>shift(8 TO 12) & shift(8 TO 10), + g=>shift(13 TO 15) & shift(0 TO 2) & shift(13 TO 14), + r=>shift(3 TO 7) & shift(3 TO 5)); + WHEN "1100" => -- 16bpp 1555 + RETURN (b=>shift(9 TO 13) & shift(9 TO 11), + g=>shift(14 TO 15) & shift(0 TO 2) & shift(14 TO 15) & shift(0), + r=>shift(3 TO 7) & shift(3 TO 5)); + WHEN "0101" | "0110" => -- 24bpp / 32bpp + RETURN (r=>shift(0 TO 7),g=>shift(8 TO 15),b=>shift(16 TO 23)); + + WHEN OTHERS => + RETURN (r=>shift(0 TO 7),g=>shift(8 TO 15),b=>shift(16 TO 23)); + + END CASE; + END FUNCTION; + + FUNCTION pixoffset(adrs : unsigned(31 DOWNTO 0); + format : unsigned (5 DOWNTO 0)) RETURN natural IS + BEGIN + CASE format(2 DOWNTO 0) IS + WHEN "011" => -- 8bbp + RETURN to_integer(adrs(NB_LA-1 DOWNTO 0)); + WHEN "100" => -- 16bpp 565 + RETURN to_integer(adrs(NB_LA-1 DOWNTO 1)); + WHEN OTHERS => -- 32bpp + RETURN to_integer(adrs(NB_LA-1 DOWNTO 2)); + END CASE; + END FUNCTION; + + FUNCTION swap(d : unsigned(N_DW-1 DOWNTO 0)) RETURN unsigned IS + VARIABLE e : unsigned(N_DW-1 DOWNTO 0); + BEGIN + IF BYTESWAP THEN + FOR i IN 0 TO N_DW/8-1 LOOP + e(i*8+7 DOWNTO i*8):=d(N_DW-i*8-1 DOWNTO N_DW-i*8-8); + END LOOP; + RETURN e; + ELSE + RETURN d; + END IF; + END FUNCTION swap; + + ----------------------------------------------------------------------------- + FUNCTION altx (a : unsigned(1 DOWNTO 0)) RETURN unsigned IS + BEGIN + CASE a IS + WHEN "00" => RETURN "0001"; + WHEN "01" => RETURN "0010"; + WHEN "10" => RETURN "0100"; + WHEN OTHERS => RETURN "1000"; + END CASE; + END FUNCTION; + + ----------------------------------------------------------------------------- + FUNCTION bound(a : unsigned; + s : natural) RETURN unsigned IS + BEGIN + IF a(a'left)='1' THEN + RETURN x"00"; + ELSIF a(a'left DOWNTO s)/=0 THEN + RETURN x"FF"; + ELSE + RETURN a(s-1 DOWNTO s-8); + END IF; + END FUNCTION bound; + + ----------------------------------------------------------------------------- + -- Nearest + FUNCTION near_frac(f : unsigned) RETURN unsigned IS + VARIABLE x : unsigned(FRAC-1 DOWNTO 0); + BEGIN + x:=(OTHERS =>f(f'left)); + RETURN x; + END FUNCTION; + + SIGNAL o_h_frac2,o_v_frac : unsigned(FRAC-1 DOWNTO 0); + SIGNAL o_h_bil_pix,o_v_bil_pix : type_pix; + + ----------------------------------------------------------------------------- + -- Nearest + Bilinear + Sharp Bilinear + FUNCTION bil_frac(f : unsigned) RETURN unsigned IS + BEGIN + RETURN f(f'left DOWNTO f'left+1-FRAC); + END FUNCTION; + + TYPE type_bil_t IS RECORD + r,g,b : unsigned(8+FRAC DOWNTO 0); + END RECORD; + FUNCTION bil_calc(f : unsigned(FRAC-1 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_bil_t IS + VARIABLE fp,fn : unsigned(FRAC DOWNTO 0); + VARIABLE u : unsigned(8+FRAC DOWNTO 0); + VARIABLE x : type_bil_t; + CONSTANT Z : unsigned(FRAC-1 DOWNTO 0):=(OTHERS =>'0'); + BEGIN + fp:='0' & f; + fn:=('1' & Z) - fp; + u:=p(2).r * fp + p(1).r * fn; + x.r:=u; + u:=p(2).g * fp + p(1).g * fn; + x.g:=u; + u:=p(2).b * fp + p(1).b * fn; + x.b:=u; + RETURN x; + END FUNCTION; + SIGNAL o_h_bil_t,o_v_bil_t : type_bil_t; + SIGNAL i_h_bil_t : type_bil_t; + + ----------------------------------------------------------------------------- + -- Sharp Bilinear + -- <0.5 : x*x*x*4 + -- >0.5 : 1 - (1-x)*(1-x)*(1-x)*4 + + TYPE type_sbil_tt IS RECORD + f : unsigned(FRAC-1 DOWNTO 0); + s : unsigned(FRAC-1 DOWNTO 0); + END RECORD; + + SIGNAL o_h_sbil_t,o_v_sbil_t : type_sbil_tt; + + FUNCTION sbil_frac1(f : unsigned(11 DOWNTO 0)) RETURN type_sbil_tt IS + VARIABLE u : unsigned(FRAC-1 DOWNTO 0); + VARIABLE v : unsigned(2*FRAC-1 DOWNTO 0); + VARIABLE x : type_sbil_tt; + BEGIN + IF f(11)='0' THEN + u:=f(11 DOWNTO 12-FRAC); + ELSE + u:=NOT f(11 DOWNTO 12-FRAC); + END IF; + v:=u*u; + x.f:=u; + x.s:=v(2*FRAC-2 DOWNTO FRAC-1); + RETURN x; + END FUNCTION; + + FUNCTION sbil_frac2(f : unsigned(11 DOWNTO 0); + t : type_sbil_tt) RETURN unsigned IS + VARIABLE v : unsigned(2*FRAC-1 DOWNTO 0); + BEGIN + v:=t.f*t.s; + IF f(11)='0' THEN + RETURN v(2*FRAC-2 DOWNTO FRAC-1); + ELSE + RETURN NOT v(2*FRAC-2 DOWNTO FRAC-1); + END IF; + END FUNCTION; + + ----------------------------------------------------------------------------- + -- Bicubic + TYPE type_bic_abcd IS RECORD + a : unsigned(7 DOWNTO 0); -- 0.8 + b : signed(8 DOWNTO 0); -- 0.9 + c : signed(11 DOWNTO 0); -- 3.9 + d : signed(10 DOWNTO 0); -- 2.9 + xx : signed(8 DOWNTO 0); -- X.X 1.8 + END RECORD; + TYPE type_bic_pix_abcd IS RECORD + r,g,b : type_bic_abcd; + END RECORD; + TYPE type_bic_tt1 IS RECORD -- Intermediate result + r_bx,g_bx,b_bx : signed(8 DOWNTO 0); -- B.X 1.8 + r_cxx,g_cxx,b_cxx : signed(11 DOWNTO 0); -- C.XX 3.9 + r_dxx,g_dxx,b_dxx : signed(10 DOWNTO 0); -- D.XX 2.9 + END RECORD; + TYPE type_bic_tt2 IS RECORD -- Intermediate result + r_abxcxx,g_abxcxx,b_abxcxx : signed(9 DOWNTO 0); -- A + B.X + C.XX 2.8 + r_dxxx,g_dxxx,b_dxxx : signed(9 DOWNTO 0); -- D.X.X.X 2.8 + END RECORD; + + ---------------------------------------------------------- + -- Y = A + B.X + C.X.X + D.X.X.X = A + X.(B + X.(C + X.D)) + -- A = Y(0) 0 .. 1 unsigned + -- B = Y(1)/2 - Y(-1)/2 -1/2 .. +1/2 signed + -- C = Y(-1) - 5*Y(0)/2 + 2*Y(1) - Y(2)/2 -3 .. +3 signed + -- D = -Y(-1)/2 + 3*Y(0)/2 - 3*Y(1)/2 + Y(2)/2 -2 .. +2 signed + + FUNCTION bic_calc0(f : unsigned(11 DOWNTO 0); + pm,p0,p1,p2 : unsigned(7 DOWNTO 0)) RETURN type_bic_abcd IS + VARIABLE xx : signed(2*FRAC+1 DOWNTO 0); -- 2.(2*FRAC) + BEGIN + xx := signed('0' & f(11 DOWNTO 12-FRAC)) * + signed('0' & f(11 DOWNTO 12-FRAC)); -- 2.(2*FRAC) + RETURN type_bic_abcd'( + a=>p0,-- 0.8 + b=>signed(('0' & p1) - ('0' & pm)), -- 0.9 + c=>signed(("000" & pm & '0') - ("00" & p0 & "00") - ("0000" & p0) + + ("00" & p1 & "00") - ("0000" & p2)), -- 3.9 + d=>signed(("00" & p0 & '0') - ("00" & p1 & '0') - ("000" & p1) + + ("000" & p0) + ("000" & p2) - ("000" & pm)), -- 2.9 + xx=>xx(2*FRAC DOWNTO 2*FRAC-8)); -- 1.8 + END FUNCTION; + FUNCTION bic_calc0(f : unsigned(11 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_bic_pix_abcd IS + BEGIN + RETURN type_bic_pix_abcd'(r=>bic_calc0(f,p(0).r,p(1).r,p(2).r,p(3).r), + g=>bic_calc0(f,p(0).g,p(1).g,p(2).g,p(3).g), + b=>bic_calc0(f,p(0).b,p(1).b,p(2).b,p(3).b)); + END FUNCTION; + + ---------------------------------------------------------- + -- Calc : B.X, C.XX, D.XX + FUNCTION bic_calc1(f : unsigned(11 DOWNTO 0); + abcd : type_bic_pix_abcd) RETURN type_bic_tt1 IS + VARIABLE t : type_bic_tt1; + VARIABLE bx : signed(9+FRAC DOWNTO 0); -- 1.(FRAC+9) + VARIABLE cxx : signed(20 DOWNTO 0); -- 4.17 + VARIABLE dxx : signed(19 DOWNTO 0); -- 3.17 + BEGIN + bx := abcd.r.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.r_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.r.c * abcd.r.xx; -- 3.9 * 1.8 = 4.17 + t.r_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.r.d * abcd.r.xx; -- 2.9 * 1.8 = 3.17 + t.r_dxx:=dxx(18 DOWNTO 8); -- 2.9 + bx := abcd.g.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.g_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.g.c * abcd.g.xx; -- 3.9 * 1.8 = 4.17 + t.g_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.g.d * abcd.g.xx; -- 2.9 * 1.8 = 3.17 + t.g_dxx:=dxx(18 DOWNTO 8); -- 2.9 + bx := abcd.b.b * signed('0' & f(11 DOWNTO 12-FRAC)); -- 1.(FRAC+9) + t.b_bx:=bx(9+FRAC DOWNTO 9+FRAC-8); -- 1.8 + cxx:= abcd.b.c * abcd.b.xx; -- 3.9 * 1.8 = 4.17 + t.b_cxx:=cxx(19 DOWNTO 8); -- 3.9 + dxx:= abcd.b.d * abcd.b.xx; -- 2.9 * 1.8 = 3.17 + t.b_dxx:=dxx(18 DOWNTO 8); -- 2.9 + RETURN t; + END FUNCTION; + + ---------------------------------------------------------- + -- Calc A + BX + CXX , X.DXX + FUNCTION bic_calc2(f : unsigned(11 DOWNTO 0); + t : type_bic_tt1; + abcd : type_bic_pix_abcd) RETURN type_bic_tt2 IS + VARIABLE u : type_bic_tt2; + VARIABLE x : signed(11+FRAC DOWNTO 0); -- 3.(9+FRAC) + BEGIN + u.r_abxcxx:=(t.r_bx(8) & t.r_bx) + ("00" & signed(abcd.r.a)) + t.r_cxx(10 DOWNTO 1); -- 2.8 + u.g_abxcxx:=(t.g_bx(8) & t.g_bx) + ("00" & signed(abcd.g.a)) + t.g_cxx(10 DOWNTO 1); -- 2.8 + u.b_abxcxx:=(t.b_bx(8) & t.b_bx) + ("00" & signed(abcd.b.a)) + t.b_cxx(10 DOWNTO 1); -- 2.8 + + x:=t.r_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.r_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + x:=t.g_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.g_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + x:=t.b_dxx * signed('0' & f(11 DOWNTO 12-FRAC)); --2.9 * 1.FRAC =3.(9+FRAC) + u.b_dxxx:=x(10+FRAC DOWNTO 9+FRAC-8); -- 2.8 + RETURN u; + END FUNCTION; + + ---------------------------------------------------------- + -- Calc (A + BX + CXX) + (DXXX) + FUNCTION bic_calc3(f : unsigned(11 DOWNTO 0); + t : type_bic_tt2; + abcd : type_bic_pix_abcd) RETURN type_pix IS + VARIABLE x : type_pix; + VARIABLE v : signed(9 DOWNTO 0); -- 2.8 + BEGIN + v:=t.r_abxcxx + t.r_dxxx; + x.r:=bound(unsigned(v),8); + v:=t.g_abxcxx + t.g_dxxx; + x.g:=bound(unsigned(v),8); + v:=t.b_abxcxx + t.b_dxxx; + x.b:=bound(unsigned(v),8); + RETURN x; + END FUNCTION; + + ----------------------------------------------------------------------------- + SIGNAL o_h_bic_pix,o_v_bic_pix : type_pix; + SIGNAL o_h_bic_abcd1,o_h_bic_abcd2 : type_bic_pix_abcd; + SIGNAL o_v_bic_abcd1,o_v_bic_abcd2 : type_bic_pix_abcd; + SIGNAL o_h_bic_tt1,o_v_bic_tt1 : type_bic_tt1; + SIGNAL o_h_bic_tt2,o_v_bic_tt2 : type_bic_tt2; + + ----------------------------------------------------------------------------- + -- Polyphase + + CONSTANT POLY16 : arr_int9 := ( + -24,-21,-15,-9,-5,-1,4,8,6,8,5,4,3,1,0,0, + 176,174,169,160,150,131,115,85,58,27,4,-6,-20,-24,-26,-25, + -24,-25,-26,-24,-20,-6,4,27,58,85,115,131,150,160,169,174, + 0,0,0,1,3,4,5,8,6,8,4,-1,-5,-9,-15,-21); + + CONSTANT POLY32 : arr_int9 := ( + -24,-22,-20,-18,-16,-13,-11,-8,-6,-3,-1,0,2,3,5,5,6,6,6,5,5,4,4,3,2,1,1,0,0,0,0,0, + 176,175,174,172,169,164,160,153,147,138,129,119,109,96,84,71,58,40,22,12,3,-4,-12,-16,-20,-22,-25,-25,-26,-25,-25,-25, + -24,-25,-26,-26,-26,-24,-23,-19,-16,-10,-4,4,11,22,32,45,58,77,96,108,119,129,140,147,154,159,165,168,172,173,175,175, + 0,0,0,0,1,1,2,2,3,3,4,5,6,7,7,7,6,5,4,3,1,-1,-4,-6,-8,-10,-13,-15,-18,-20,-22,-22); + + FUNCTION init_poly RETURN arr_uv36 IS + VARIABLE m : arr_uv36(0 TO 2**FRAC-1) :=(OTHERS =>x"000000000"); + BEGIN + IF FRAC=4 THEN + FOR i IN 0 TO 15 LOOP + m(i):=unsigned(to_signed(POLY16(i),9) & to_signed(POLY16(i+16),9) & + to_signed(POLY16(i+32),9) & to_signed(POLY16(i+48),9)); + END LOOP; + ELSIF FRAC=5 THEN + FOR i IN 0 TO 31 LOOP + m(i):=unsigned(to_signed(POLY32(i),9) & to_signed(POLY32(i+32),9) & + to_signed(POLY32(i+64),9) & to_signed(POLY32(i+96),9)); + END LOOP; + END IF; + RETURN m; + END FUNCTION; + + SIGNAL o_h_poly : arr_uv36(0 TO 2**FRAC-1):=init_poly; + SIGNAL o_v_poly : arr_uv36(0 TO 2**FRAC-1):=init_poly; + ATTRIBUTE ramstyle OF o_h_poly : SIGNAL IS "no_rw_check"; + ATTRIBUTE ramstyle OF o_v_poly : SIGNAL IS "no_rw_check"; + SIGNAL o_h_poly_a,o_v_poly_a : integer RANGE 0 TO 2**FRAC-1; + SIGNAL o_h_poly_dr,o_h_poly_dr2,o_v_poly_dr,o_v_poly_dr2 : unsigned(35 DOWNTO 0); + SIGNAL o_h_poly_pix,o_v_poly_pix : type_pix; + SIGNAL poly_h_wr,poly_v_wr : std_logic; + SIGNAL poly_tdw : unsigned(35 DOWNTO 0); + SIGNAL poly_a2 : unsigned(FRAC-1 DOWNTO 0); + + TYPE type_poly_t IS RECORD + r0,r1,b0,b1,g0,g1 : signed(17 DOWNTO 0); + END RECORD; + + SIGNAL o_h_poly_t,o_v_poly_t : type_poly_t; + + FUNCTION poly_calc1(fi : unsigned(35 DOWNTO 0); + p : arr_pix(0 TO 3)) RETURN type_poly_t IS + VARIABLE t : type_poly_t; + BEGIN + -- 2.7 * 1.8 = 3.15 + t.r0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).r) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).r)); + t.r1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).r) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).r)); + t.g0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).g) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).g)); + t.g1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).g) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).g)); + t.b0:=(signed(fi(35 DOWNTO 27)) * signed('0' & p(0).b) + + signed(fi(26 DOWNTO 18)) * signed('0' & p(1).b)); + t.b1:=(signed(fi(17 DOWNTO 9)) * signed('0' & p(2).b) + + signed(fi( 8 DOWNTO 0)) * signed('0' & p(3).b)); + RETURN t; + END FUNCTION; + + FUNCTION poly_calc2(t : type_poly_t) RETURN type_pix IS + VARIABLE p : type_pix; + BEGIN + p.r:=bound(unsigned(t.r0+t.r1),15); + p.g:=bound(unsigned(t.g0+t.g1),15); + p.b:=bound(unsigned(t.b0+t.b1),15); + RETURN p; + END FUNCTION; + +BEGIN + + ----------------------------------------------------------------------------- + i_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(i_clk); + o_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(o_clk); + avl_reset_na<='0' WHEN reset_na='0' ELSE '1' WHEN rising_edge(avl_clk); + + ----------------------------------------------------------------------------- + -- Input pixels FIFO and shreg + InAT:PROCESS(i_clk,i_reset_na) IS + CONSTANT Z : unsigned(FRAC-1 DOWNTO 0):=(OTHERS =>'0'); + VARIABLE frac_v : unsigned(FRAC-1 DOWNTO 0); + VARIABLE div_v : unsigned(16 DOWNTO 0); + VARIABLE dir_v : unsigned(11 DOWNTO 0); + VARIABLE bil_t_v : type_bil_t; + BEGIN + IF i_reset_na='0' THEN + i_write<='0'; + + ELSIF rising_edge(i_clk) THEN + i_push<='0'; + i_pushhead<='0'; + i_eol<='0'; -- End Of Line + i_freeze <=freeze; -- + i_iauto<=iauto; -- + i_wreq<='0'; + i_wr<='0'; + + ------------------------------------------------------ + i_head(127 DOWNTO 120)<=x"01"; -- Header type + i_head(119 DOWNTO 112)<="000000" & i_format; -- Header format + i_head(111 DOWNTO 96)<="0000" & to_unsigned(N_BURST,12); -- Header size + i_head(95 DOWNTO 80)<=x"0000"; -- Attributes. TBD + i_head(80)<=i_inter; + i_head(81)<=i_flm; + i_head(82)<=i_hdown; + i_head(83)<=i_vdown; + i_head(84)<=i_mode(3); + i_head(87 DOWNTO 85)<=i_count; + i_head(79 DOWNTO 64)<="0000" & to_unsigned(i_hrsize,12); -- Image width + i_head(63 DOWNTO 48)<="0000" & to_unsigned(i_vrsize,12); -- Image height + i_head(47 DOWNTO 32)<= + to_unsigned(N_BURST * i_hburst,16); -- Line Length. Bytes + i_head(31 DOWNTO 16)<="0000" & to_unsigned(i_ohsize,12); + i_head(15 DOWNTO 0) <="0000" & to_unsigned(i_ovsize,12); + + ------------------------------------------------------ + i_ppix<=(i_r,i_g,i_b); + i_pvs<=i_vs; + i_pfl<=i_fl; + i_pde<=i_de; + i_pce<=i_ce; + + ------------------------------------------------------ + IF i_pce='1' THEN + ---------------------------------------------------- + i_vs_pre<=i_pvs; + i_de_pre<=i_pde; + i_fl_pre<=i_pfl; + + ---------------------------------------------------- + -- Detect interlaced video + IF NOT INTER THEN + i_intercnt<=0; + ELSIF i_pfl/=i_fl_pre THEN + i_intercnt<=3; + ELSIF i_pvs='1' AND i_vs_pre='0' AND i_intercnt>0 THEN + i_intercnt<=i_intercnt-1; + END IF; + i_inter<=to_std_logic(i_intercnt>0); + + ---------------------------------------------------- + IF i_pvs='1' AND i_vs_pre='0' THEN + i_sof<='1'; + END IF; + + IF i_pde='1' AND i_de_pre='0' THEN + i_flm<=i_pfl; + END IF; + + IF i_pde='1' AND i_sof='1' THEN + i_sof<='0'; + i_vcpt<=0; + IF i_inter='1' AND i_flm='0' AND i_half='0' AND INTER THEN + i_line<='1'; + i_adrsi<=to_unsigned(N_BURST * i_hburst,32) + + to_unsigned(N_BURST * to_integer( + unsigned'("00") & to_std_logic(HEADER)),32); + ELSE + i_line<='0'; + i_adrsi<=to_unsigned(N_BURST * to_integer( + unsigned'("00") & to_std_logic(HEADER)),32); + END IF; + END IF; + + i_ven<=to_std_logic(i_hcpt>=i_hmin AND i_hcpt<=i_hmax AND + i_vcpt>=i_vmin AND i_vcpt<=i_vmax); + + -- Detects end of frame for triple buffering. + i_endframe0<=i_vs AND (NOT i_inter OR i_flm); + i_endframe1<=i_vs AND (NOT i_inter OR NOT i_flm); + + i_vss<=to_std_logic(i_vcpt>=i_vmin AND i_vcpt<=i_vmax); + + ---------------------------------------------------- + IF i_pde='1' AND i_de_pre='0' THEN + i_vimax<=i_vcpt; + i_hcpt<=0; + ELSE + i_hcpt<=(i_hcpt+1) MOD 4096; + END IF; + + IF i_pde='0' AND i_de_pre='1' THEN + i_himax<=i_hcpt; + END IF; + + IF i_iauto='1' THEN + -- Auto-size + i_hmin<=0; + i_hmax<=i_himax; + i_vmin<=0; + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vmax<=i_vimax; + END IF; + ELSE + -- Forced image + i_hmin<=himin; -- + i_hmax<=himax; -- + i_vmin<=vimin; -- + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vmax<=vimax; -- + END IF; + END IF; + + IF i_pvs='1' AND i_vs_pre='0' AND (i_inter='0' OR i_pfl='0') THEN + i_vdmax<=i_vimax; + END IF; + i_hdmax<=i_himax; + + IF i_format="00" OR i_format="11" THEN -- 16bpp + i_hburst<=(i_hrsize*2 + N_BURST - 1) / N_BURST; + ELSIF i_format="01" THEN -- 24bpp + i_hburst<=(i_hrsize*3 + N_BURST - 1) / N_BURST; + ELSE -- 32bpp + i_hburst<=(i_hrsize*4 + N_BURST - 1) / N_BURST; + END IF; + ---------------------------------------------------- + i_mode<=mode; -- + i_format<=format; -- + + -- Downscaling : Nearest or bilinear + i_bil<=to_std_logic(i_mode(2 DOWNTO 0)/="000" AND DOWNSCALE); + + i_hdown<=to_std_logic(i_hsize>i_ohsize AND DOWNSCALE); --H downscale + i_vdown<=to_std_logic(i_vsize>i_ovsize AND DOWNSCALE); --V downscale + + ---------------------------------------------------- + i_hsize <=(4096+i_hmax-i_hmin+1) MOD 4096; + i_vmaxmin<=(4096+i_vmax-i_vmin+1) MOD 4096; + + IF i_inter='0' THEN + -- Non interlaced + i_vsize<=i_vmaxmin; + i_half <='0'; + ELSIF i_ovsize<2*i_vmaxmin THEN + -- Interlaced, but downscaling, use only half frames + i_vsize<=i_vmaxmin; + i_half <='1'; + ELSE + -- Interlaced : Double image height + i_vsize<=2*i_vmaxmin; + i_half <='0'; + END IF; + + i_ohsize<=o_hsize; -- + i_ovsize<=o_vsize; -- + + ---------------------------------------------------- + -- Downscaling vertical + i_divstart<='0'; + IF i_de_delay=16 THEN + IF (i_vacc + 2*i_ovsize) < 2*i_vsize THEN + i_vacc<=(i_vacc + 2*i_ovsize) MOD 8192; + i_vnp<='0'; + ELSE + i_vacc<=(i_vacc + 2*i_ovsize - 2*i_vsize + 8192) MOD 8192; + i_vnp<='1'; + END IF; + i_divstart<='1'; + + IF i_vcpt=i_vmin THEN + i_vacc<=(i_vsize - i_ovsize + 8192) MOD 8192; + i_vnp<='1'; -- + END IF; + END IF; + + IF i_vdown='0' THEN + i_vnp<='1'; + END IF; + + -- Downscaling horizontal + IF i_ven='1' THEN + IF i_hacc + 2*i_ohsize < 2*i_hsize THEN + i_hacc<=(i_hacc + 2*i_ohsize) MOD 8192; + i_hnp<='0'; -- Skip. pix. + ELSE + i_hacc<=(i_hacc + 2*i_ohsize - 2*i_hsize + 8192) MOD 8192; + i_hnp<='1'; + END IF; + END IF; + IF i_hdown='0' THEN + i_hnp<='1'; + END IF; + + ---------------------------------------------------- + -- Downscaling interpolation + i_hpixp<=i_ppix; + i_hpix0<=i_hpixp; + i_hpix1<=i_hpix0; + i_hpix2<=i_hpix1; + i_hpix3<=i_hpix2; + i_hpix4<=i_hpix3; + + i_hnp1<=i_hnp; i_hnp2<=i_hnp1; i_hnp3<=i_hnp2; i_hnp4<=i_hnp3; + i_ven1<=i_ven; i_ven2<=i_ven1; i_ven3<=i_ven2; i_ven4<=i_ven3; + i_ven5<=i_ven4; i_ven6<=i_ven5; + + -- C1 : DIV 1. Pipelined 4 bits non-restoring divider + dir_v:=x"000"; + div_v:=to_unsigned(i_hacc * 16,17); + + div_v:=div_v-to_unsigned(i_hsize*16,17); + dir_v(11):=NOT div_v(16); + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*8,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*8,17); + END IF; + dir_v(10):=NOT div_v(16); + i_div<=div_v; + i_dir<=dir_v; + + -- C2 : DIV 2. + div_v:=i_div; + dir_v:=i_dir; + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*4,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*4,17); + END IF; + dir_v(9):=NOT div_v(16); + + IF div_v(16)='0' THEN + div_v:=div_v-to_unsigned(i_hsize*2,17); + ELSE + div_v:=div_v+to_unsigned(i_hsize*2,17); + END IF; + dir_v(8):=NOT div_v(16); + i_h_frac<=dir_v; + + -- C4 : Horizontal Bilinear + IF i_bil='0' THEN + frac_v:=near_frac(i_h_frac); + ELSE + frac_v:=bil_frac(i_h_frac); + END IF; + + i_h_bil_t<=bil_calc(frac_v,(i_hpix2,i_hpix2,i_hpix3,i_hpix3)); + i_hpix.r<=bound(i_h_bil_t.r,8+FRAC); + i_hpix.g<=bound(i_h_bil_t.g,8+FRAC); + i_hpix.b<=bound(i_h_bil_t.b,8+FRAC); + + IF i_hdown='0' THEN + i_hpix<=i_hpix4; + END IF; + + -- C5 : Vertical Bilinear + IF i_bil='0' THEN + frac_v:=near_frac(i_v_frac(11 DOWNTO 0)); + ELSE + frac_v:=bil_frac(i_v_frac(11 DOWNTO 0)); + END IF; + + bil_t_v:=bil_calc(frac_v,(i_hpix,i_hpix,i_ldrm,i_ldrm)); + i_pix.r<=bound(bil_t_v.r,8+FRAC); + i_pix.g<=bound(bil_t_v.g,8+FRAC); + i_pix.b<=bound(bil_t_v.b,8+FRAC); + + IF i_vdown='0' THEN + i_pix<=i_hpix; + END IF; + + ---------------------------------------------------- + -- VNP : Vert. downscaling line enable + -- HNP : Horiz. downscaling pix. enable + -- VEN : Enable pixel within displayed window + + IF (i_hnp4='1' AND i_ven6='1') OR i_pushend='1' THEN + i_shift<=shift_ishift(i_shift,i_pix,i_format); + i_dw<=shift_ipack(i_dw,i_acpt,i_shift,i_pix,i_format); + + IF shift_inext(i_acpt,i_format) AND i_vnp='1' THEN + i_push<='1'; + i_pushend<='0'; + END IF; + i_acpt<=(i_acpt+1) MOD 16; + END IF; + + IF i_ven6='1' AND i_ven5='0' AND i_vnp='1' THEN + i_pushend<='1'; + END IF; + i_pushend2<=i_pushend; + + IF i_pushend2='1' AND i_pushend='0' THEN + i_eol<='1'; + END IF; + + IF i_pde='0' AND i_de_pre='1' THEN + i_de_delay<=0; + ELSIF i_de_delay<18 THEN + i_de_delay<=i_de_delay+1; + END IF; + + IF i_de_delay=16 THEN + i_lwad<=0; + i_lrad<=0; + i_vcpt<=i_vcpt+1; + i_hacc<=(i_hsize - i_ohsize + 8192) MOD 8192; + i_hbcpt<=0; + END IF; + IF i_de_delay=17 THEN + i_acpt<=0; + i_wad<=2*BLEN-1; + END IF; + + IF i_pvs='0' AND i_vs_pre='1' THEN + -- Push header + i_pushhead<=to_std_logic(HEADER); + END IF; + + END IF; -- IF i_pce='1' + + ------------------------------------------------------ + -- Push pixels to downscaling line buffer + i_lwr<=i_hnp4 AND i_ven5 AND i_pce; + IF i_lwr='1' THEN + i_lwad<=(i_lwad+1) MOD OHRES; + END IF; + i_ldw<=i_hpix; + + IF i_hnp3='1' AND i_ven4='1' AND i_pce='1' THEN + i_lrad<=(i_lrad+1) MOD OHRES; + END IF; + + ------------------------------------------------------ + -- Write image properties header + i_pushhead2<=i_pushhead; i_pushhead3<=i_pushhead2; + + IF i_pushhead='1' AND i_freeze='0' THEN + i_dw<=i_head(127 DOWNTO 128-N_DW); + i_count<=i_count+1; + i_wr<='1'; + i_wad<=0; + IF N_DW=128 THEN + i_alt<='0'; + i_wreq<=NOT i_freeze; + i_adrs<=(OTHERS =>'0'); + END IF; + END IF; + + IF i_pushhead2='1' AND i_freeze='0' AND N_DW=64 THEN + i_dw<=i_head(N_DW-1 DOWNTO 0); + i_wr<='1'; + i_wad<=1; + i_wreq<=NOT i_freeze; + i_alt<='0'; + i_adrs<=(OTHERS =>'0'); + END IF; + IF i_pushhead3='1' THEN + i_wad<=BLEN-1; + END IF; + + ------------------------------------------------------ + -- Push pixels to DPRAM + IF i_push='1' AND i_freeze='0' THEN + i_wr<='1'; + i_wad<=(i_wad+1) MOD (BLEN*2); + IF (i_wad+1) MOD BLEN=BLEN-1 AND i_hbcpt 12 + IDividers:PROCESS (i_clk,i_reset_na) IS + BEGIN + IF i_reset_na='0' THEN +--pragma synthesis_off + i_v_frac<=x"000"; +--pragma synthesis_on + NULL; + ELSIF rising_edge(i_clk) THEN + i_vdivi<=to_unsigned(2*i_vsize,13); + i_vdivr<=to_unsigned(i_vacc*4096,25); + + ------------------------------------------------------ + IF i_divstart='1' THEN + i_divcpt<=0; + i_divrun<='1'; + + ELSIF i_divrun='1' THEN + ---------------------------------------------------- + IF i_divcpt=6 THEN + i_divrun<='0'; + i_v_frac<=i_vdivr(4 DOWNTO 0) & NOT i_vdivr(24) & "000000"; + ELSE + i_divcpt<=i_divcpt+1; + END IF; + + IF i_vdivr(24)='0' THEN + i_vdivr(24 DOWNTO 12)<=i_vdivr(23 DOWNTO 11) - i_vdivi; + ELSE + i_vdivr(24 DOWNTO 12)<=i_vdivr(23 DOWNTO 11) + i_vdivi; + END IF; + i_vdivr(11 DOWNTO 0)<=i_vdivr(10 DOWNTO 0) & NOT i_vdivr(24); + + ---------------------------------------------------- + END IF; + END IF; + END PROCESS IDividers; + + ----------------------------------------------------------------------------- + -- DPRAM Input. Double buffer for RAM bursts. + PROCESS (i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_wr='1' THEN + i_dpram(i_wad)<=i_dw; + END IF; + END IF; + END PROCESS; + + avl_dr<=i_dpram(avl_rad_c) WHEN rising_edge(avl_clk); + + -- Line buffer for downscaling with interpolation + DownLine:IF DOWNSCALE GENERATE + ILBUF:PROCESS(i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_lwr='1' THEN + i_mem(i_lwad MOD IHRES)<=i_ldw; + END IF; + IF i_pce='1' THEN + i_ldrm<=i_mem(i_lrad MOD IHRES); + END IF; + END IF; + END PROCESS ILBUF; + END GENERATE DownLine; + + ----------------------------------------------------------------------------- + -- AVALON interface + Avaloir:PROCESS(avl_clk,avl_reset_na) IS + VARIABLE adr_v : unsigned(31 DOWNTO 0); + BEGIN + IF avl_reset_na='0' THEN + avl_state<=sIDLE; + avl_write_sr<='0'; + avl_read_sr<='0'; + avl_readdataack<='0'; + avl_readack<='0'; + + ELSIF rising_edge(avl_clk) THEN + ---------------------------------- + avl_write_sync<=i_write; -- + avl_write_sync2<=avl_write_sync; + avl_write_pulse<=avl_write_sync XOR avl_write_sync2; + IF avl_write_pulse='1' THEN + avl_wadrs <=i_wadrs AND (RAMSIZE - 1); -- + avl_wline <=i_wline; -- + avl_walt <=i_walt; -- + END IF; + + ---------------------------------- + avl_read_sync<=o_read; -- + avl_read_sync2<=avl_read_sync; + avl_read_pulse<=avl_read_sync XOR avl_read_sync2; + avl_radrs <=o_adrs; -- + avl_rline <=o_rline; -- + + -------------------------------------------- + avl_o_vs_sync<=o_vsv(0); -- + avl_o_vs<=avl_o_vs_sync; + + avl_fb_ena<=o_fb_ena; -- + IF avl_fb_ena='0' THEN + IF HEADER THEN + avl_o_offset0<=buf_offset(o_obuf0,RAMBASE,RAMSIZE) + N_BURST; -- + avl_o_offset1<=buf_offset(o_obuf1,RAMBASE,RAMSIZE) + N_BURST; -- + ELSE + avl_o_offset0<=buf_offset(o_obuf0,RAMBASE,RAMSIZE); -- + avl_o_offset1<=buf_offset(o_obuf1,RAMBASE,RAMSIZE); -- + END IF; + ELSIF avl_o_vs_sync='0' AND avl_o_vs='1' THEN + -- Copy framebuffer base address at VS falling edge + avl_o_offset0<=o_fb_base; -- + avl_o_offset1<=o_fb_base; -- + END IF; + + avl_i_offset0<=buf_offset(o_ibuf0,RAMBASE,RAMSIZE); -- + avl_i_offset1<=buf_offset(o_ibuf1,RAMBASE,RAMSIZE); -- + + -------------------------------------------- + avl_dw<=swap(unsigned(avl_readdata)); + avl_read_i<='0'; + avl_write_i<='0'; + + avl_write_sr<=(avl_write_sr OR avl_write_pulse) AND NOT avl_write_clr; + avl_read_sr <=(avl_read_sr OR avl_read_pulse) AND NOT avl_read_clr; + avl_write_clr<='0'; + avl_read_clr <='0'; + + avl_rad<=avl_rad_c; + + -------------------------------------------- + CASE avl_state IS + WHEN sIDLE => + IF avl_write_sr='1' THEN + avl_state<=sWRITE; + avl_write_clr<='1'; + IF avl_walt='0' THEN + avl_rad<=0; + ELSE + avl_rad<=BLEN; + END IF; + IF avl_wline='0' THEN + avl_address<=std_logic_vector( + avl_wadrs(N_AW+NB_LA-1 DOWNTO NB_LA) + + avl_i_offset0(N_AW+NB_LA-1 DOWNTO NB_LA)); + ELSE + avl_address<=std_logic_vector( + avl_wadrs(N_AW+NB_LA-1 DOWNTO NB_LA) + + avl_i_offset1(N_AW+NB_LA-1 DOWNTO NB_LA)); + END IF; + ELSIF avl_read_sr='1' THEN + avl_state<=sREAD; + avl_read_clr<='1'; + END IF; + + WHEN sWRITE => + avl_write_i<='1'; + IF avl_write_i='1' AND avl_waitrequest='0' THEN + IF (avl_rad MOD BLEN)=BLEN-1 THEN + avl_write_i<='0'; + avl_state<=sIDLE; + END IF; + END IF; + + WHEN sREAD => + IF avl_rline='0' THEN + adr_v:=avl_radrs + avl_o_offset0; + ELSE + adr_v:=avl_radrs + avl_o_offset1; + END IF; + avl_address<=std_logic_vector(adr_v(N_AW+NB_LA-1 DOWNTO NB_LA)); + + avl_read_i<='1'; + IF avl_read_i='1' AND avl_waitrequest='0' THEN + avl_state<=sIDLE; + avl_read_i<='0'; + avl_readack<=NOT avl_readack; + END IF; + END CASE; + + -------------------------------------------- + -- Pipelined data read + avl_wr<='0'; + IF avl_readdatavalid='1' THEN + avl_wr<='1'; + avl_wad<=(avl_wad+1) MOD (2*BLEN); + IF (avl_wad MOD BLEN)=BLEN-2 THEN + avl_readdataack<=NOT avl_readdataack; + END IF; + END IF; + + IF avl_o_vs_sync='0' AND avl_o_vs='1' THEN + avl_wad<=2*BLEN-1; + END IF; + + -------------------------------------------- + END IF; + END PROCESS Avaloir; + + avl_read<=avl_read_i; + avl_write<=avl_write_i; + avl_writedata<=std_logic_vector(swap(avl_dr)); + avl_burstcount<=std_logic_vector(to_unsigned(BLEN,8)); + avl_byteenable<=(OTHERS =>'1'); + + avl_rad_c<=(avl_rad+1) MOD (2*BLEN) + WHEN avl_write_i='1' AND avl_waitrequest='0' ELSE avl_rad; + + ----------------------------------------------------------------------------- + -- DPRAM Output. Double buffer for RAM bursts. + PROCESS (avl_clk) IS + BEGIN + IF rising_edge(avl_clk) THEN + IF avl_wr='1' THEN + o_dpram(avl_wad)<=avl_dw; + END IF; + END IF; + END PROCESS; + + o_dr<=o_dpram(o_ad3) WHEN rising_edge(o_clk); + + ----------------------------------------------------------------------------- + -- Output Vertical Divider + -- Vfrac = Vacc / Vsize + ODivider:PROCESS (o_clk,o_reset_na) IS + BEGIN + IF o_reset_na='0' THEN +--pragma synthesis_off + o_vfrac<=x"000"; +--pragma synthesis_on + ELSIF rising_edge(o_clk) THEN + o_vdivi<=to_unsigned(2*o_vsize,13); + o_vdivr<=to_unsigned(o_vacc*4096,25); + ------------------------------------------------------ + IF o_divstart='1' THEN + o_divcpt<=0; + o_divrun<='1'; + + ELSIF o_divrun='1' THEN + ---------------------------------------------------- + IF o_divcpt=12 THEN + o_divrun<='0'; + o_vfrac<=o_vdivr(10 DOWNTO 0) & NOT o_vdivr(24); + ELSE + o_divcpt<=o_divcpt+1; + END IF; + + IF o_vdivr(24)='0' THEN + o_vdivr(24 DOWNTO 12)<=o_vdivr(23 DOWNTO 11) - o_vdivi; + ELSE + o_vdivr(24 DOWNTO 12)<=o_vdivr(23 DOWNTO 11) + o_vdivi; + END IF; + o_vdivr(11 DOWNTO 0)<=o_vdivr(10 DOWNTO 0) & NOT o_vdivr(24); + ---------------------------------------------------- + END IF; + END IF; + END PROCESS ODivider; + + ----------------------------------------------------------------------------- + Scalaire:PROCESS (o_clk,o_reset_na) IS + VARIABLE lev_inc_v,lev_dec_v : std_logic; + VARIABLE prim_v,last_v,bib_v : std_logic; + VARIABLE shift_v : unsigned(0 TO N_DW+15); + VARIABLE hpix_v : type_pix; + VARIABLE hcarry_v,vcarry_v : boolean; + VARIABLE dif_v : natural RANGE 0 TO 8*OHRES-1; + VARIABLE off_v : natural RANGE 0 TO 15; + BEGIN + IF o_reset_na='0' THEN + o_copy<=sWAIT; + o_state<=sDISP; + o_read_pre<='0'; + o_readlev<=0; + o_copylev<=0; + o_hsp<='0'; + + ELSIF rising_edge(o_clk) THEN + ------------------------------------------------------ + o_mode <=mode; -- ? + o_format <="0001" & format; -- ? + + o_run <=run; -- ? + + o_htotal <=htotal; -- ? + o_hsstart<=hsstart; -- ? + o_hsend <=hsend; -- ? + o_hdisp <=hdisp; -- ? + o_hmin <=hmin; -- ? + o_hmax <=hmax; -- ? + + o_vtotal <=vtotal; -- ? + o_vsstart<=vsstart; -- ? + o_vsend <=vsend; -- ? + o_vdisp <=vdisp; -- ? + o_vmin <=vmin; -- ? + o_vmax <=vmax; -- ? + + o_hsize <=o_hmax - o_hmin + 1; + o_vsize <=o_vmax - o_vmin + 1; + + -------------------------------------------- + -- Triple buffering. + -- For intelaced video, half frames are updated independently + -- Input : Toggle buffer at end of input frame + o_freeze <= freeze; + o_inter <=i_inter; -- + o_iendframe0<=i_endframe0; -- + o_iendframe02<=o_iendframe0; + IF o_iendframe0='1' AND o_iendframe02='0' THEN + o_ibuf0<=buf_next(o_ibuf0,o_obuf0,o_freeze); + o_bufup0<='1'; + END IF; + o_iendframe1<=i_endframe1; -- + o_iendframe12<=o_iendframe1; + IF o_iendframe1='1' AND o_iendframe12='0' THEN + o_ibuf1<=buf_next(o_ibuf1,o_obuf1,o_freeze); + o_bufup1<='1'; + END IF; + -- Output : Change framebuffer, and image properties, at VS falling edge + IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup1='1' THEN + o_obuf1<=buf_next(o_obuf1,o_ibuf1,o_freeze); + o_bufup1<='0'; + o_ihsize<=i_hrsize; -- + o_ivsize<=i_vrsize; -- + o_hdown<=i_hdown; -- + o_vdown<=i_vdown; -- + END IF; + -- Framebuffer mode. + IF o_fb_ena='1' THEN + o_ihsize<=o_fb_hsize; + o_ivsize<=o_fb_vsize; + o_format<=o_fb_format; + o_hdown<='0'; + o_vdown<='0'; + END IF; + + o_ihsize_temp <= o_ihsize * to_integer(o_format(2 DOWNTO 0) - 2); + o_ihsize_temp2 <= (o_ihsize_temp + N_BURST - 1); + o_hburst <= o_ihsize_temp2 / N_BURST; + + IF o_fb_ena='1' AND o_fb_stride /= 0 THEN + o_stride<=o_fb_stride; + ELSE + o_stride<=to_unsigned(o_ihsize_temp2,14); + o_stride(NB_BURST-1 DOWNTO 0)<=(OTHERS =>'0'); + END IF; + + IF o_vsv(1)='1' AND o_vsv(0)='0' AND o_bufup0='1' THEN + o_obuf0<=buf_next(o_obuf0,o_ibuf0,o_freeze); + o_bufup0<='0'; + END IF; + + IF o_inter='0' THEN + o_ibuf1<=o_ibuf0; + o_obuf1<=o_obuf0; + END IF; + + -- Triple buffer disabled + IF o_mode(3)='0' THEN + o_obuf0<=0; + o_obuf1<=0; + o_ibuf0<=0; + o_ibuf1<=0; + END IF; + + ------------------------------------------------------ + o_hmode<=o_mode; + IF o_hdown='1' AND DOWNSCALE THEN + -- Force nearest if downscaling : Downscaled framebuffer + o_hmode(2 DOWNTO 0)<="000"; + END IF; + + o_vmode<=o_mode; + IF o_vdown='1' AND DOWNSCALE THEN + -- Force nearest if downscaling : Downscaled framebuffer + o_vmode(2 DOWNTO 0)<="000"; + END IF; + + ------------------------------------------------------ + -- End DRAM READ + o_readack_sync<=avl_readack; -- + o_readack_sync2<=o_readack_sync; + o_readack<=o_readack_sync XOR o_readack_sync2; + + o_readdataack_sync<=avl_readdataack; -- + o_readdataack_sync2<=o_readdataack_sync; + o_readdataack<=o_readdataack_sync XOR o_readdataack_sync2; + + ------------------------------------------------------ + lev_inc_v:='0'; + lev_dec_v:='0'; + + -- acpt : Pixel position within current data word + -- dcpt : Destination image position + + -- Force preload 2 lines at top of screen + IF o_hsv(0)='1' AND o_hsv(1)='0' THEN + IF o_vcpt_pre3=o_vmin THEN + o_fload<=2; + o_bibu<='0'; + END IF; + o_hsp<='1'; + END IF; + + o_vpe<=to_std_logic(o_vcpt_pre=o_vmin); + o_divstart<='0'; + o_adrsa<='0'; + o_adrsb<=o_adrsa; + + o_vacc_ini<=(o_vsize - o_ivsize + 8192) MOD 8192; + o_hacc_ini<=(o_hsize + o_ihsize + 8192) MOD 8192; + + --Alternate phase + --o_vacc_ini<=o_ivsize; + --o_hacc_ini<=(2*o_hsize - o_ihsize + 8192) MOD 8192; + + CASE o_state IS + -------------------------------------------------- + WHEN sDISP => + IF o_hsp='1' THEN + o_state<=sHSYNC; + o_hsp<='0'; + END IF; + + -------------------------------------------------- + WHEN sHSYNC => + dif_v:=(o_vacc_next - 2*o_vsize + 16384) MOD 16384; + IF dif_v>=8192 THEN + o_vacc <=o_vacc_next; + o_vacc_next<=(o_vacc_next + 2*o_ivsize) MOD 8192; + vcarry_v:=false; + ELSE + o_vacc <=dif_v; + o_vacc_next<=(dif_v + 2*o_ivsize + 8192) MOD 8192; + vcarry_v:=true; + END IF; + o_divstart<='1'; + IF o_vcpt_pre2=o_vmin THEN + o_vacc <=o_vacc_ini; + o_vacc_next<=o_vacc_ini + 2*o_ivsize; + o_vacpt<=x"001"; + vcarry_v:=false; + END IF; + + IF vcarry_v THEN + o_vacpt<=o_vacpt+1; + END IF; + o_hbcpt<=0; -- Clear burst counter on line + IF (o_vpe='1' AND vcarry_v) OR o_fload>0 THEN + o_state<=sREAD; + ELSE + o_state<=sDISP; + END IF; + + WHEN sREAD => + -- Read a block + IF o_readlev<2 AND o_adrsb='1' THEN + lev_inc_v:='1'; + o_read_pre<=NOT o_read_pre; + o_state <=sWAITREAD; + o_bibu<=NOT o_bibu; + END IF; + prim_v:=to_std_logic(o_hbcpt=0); + last_v:=to_std_logic(o_hbcpt=o_hburst-1); + bib_v :=o_bibu; + off_v :=pixoffset(o_adrs + o_fb_base(NB_LA-1 DOWNTO 0),o_fb_format); + IF o_fb_ena='0' THEN + off_v:=0; + END IF; + o_adrsa<='1'; + + WHEN sWAITREAD => + IF o_readack='1' THEN + o_hbcpt<=o_hbcpt+1; + IF o_hbcpt=1 THEN + o_fload<=o_fload-1; + END IF; + END IF; + END IF; + + -------------------------------------------------- + END CASE; + + o_read<=o_read_pre AND o_run; + o_rline<=o_vacpt(0); -- Even/Odd line for interlaced video + + o_adrs_pre<=to_integer(o_vacpt) * to_integer(o_stride); + IF o_adrsa='1' THEN + IF o_fload=2 THEN + o_adrs<=to_unsigned(o_hbcpt * N_BURST,32); + o_alt<="1111"; + ELSIF o_fload=1 THEN + o_adrs<=to_unsigned(o_hbcpt * N_BURST,32) + o_stride; + o_alt<="0100"; + ELSE + o_adrs<=to_unsigned(o_adrs_pre + (o_hbcpt * N_BURST),32); + o_alt<=altx(o_vacpt(1 DOWNTO 0) + 1); + END IF; + END IF; + + ------------------------------------------------------ + -- Copy from buffered memory to pixel lines + o_sh<='0'; + CASE o_copy IS + WHEN sWAIT => + o_copyv(0)<='0'; + IF o_copylev>0 AND o_copyv(0)='0' THEN + o_copy<=sCOPY; + IF o_off(0)>0 AND o_primv(0)='1' THEN + o_copy<=sSHIFT; + END IF; + o_altx<=o_alt; + END IF; + o_adturn<='0'; + o_pshift<=o_off(0) -1; + IF o_primv(0)='1' THEN + -- First memcopy of a horizontal line, carriage return ! + o_ihsizem<=o_ihsize + o_off(0) - 2; + o_hacc <=o_hacc_ini; + o_hacc_next<=o_hacc_ini + 2*o_ihsize; + o_hacpt <=x"000"; + o_dcpt<=0; + o_dshi<=2; + o_acpt<=0; + o_first<='1'; + o_last<='0'; + END IF; + + IF o_bibv(0)='0' THEN + o_ad<=0; + ELSE + o_ad<=BLEN; + END IF; + + WHEN sSHIFT => + o_hacpt<=o_hacpt+1; + o_sh<='1'; + o_acpt<=(o_acpt+1) MOD 16; + IF shift_onext(o_acpt,o_format) THEN + o_ad<=(o_ad+1) MOD (2*BLEN); + END IF; + o_pshift<=o_pshift-1; + IF o_pshift=0 THEN + o_copy<=sCOPY; + END IF; + + WHEN sCOPY => + -- dshi : Force shift first two or three pixels of each line + IF o_dshi=0 THEN + dif_v:=(o_hacc_next - 2*o_hsize + (8*OHRES)) MOD (8*OHRES); + IF dif_v>=4*OHRES THEN + o_hacc<=o_hacc_next; + o_hacc_next<=o_hacc_next + 2*o_ihsize; + hcarry_v:=false; + ELSE + o_hacc<=dif_v; + o_hacc_next<=(dif_v + 2*o_ihsize + (4*OHRES)) MOD (4*OHRES); + hcarry_v:=true; + END IF; + o_dcpt<=(o_dcpt+1) MOD 4096; + ELSE + o_dshi<=o_dshi-1; + hcarry_v:=false; + END IF; + IF o_dshi<=1 THEN + o_copyv(0)<='1'; + END IF; + IF hcarry_v THEN + o_hacpt<=o_hacpt+1; + o_last <=to_std_logic(o_hacpt>=o_ihsizem); + END IF; + + IF hcarry_v OR o_dshi>0 THEN + o_sh<='1'; + o_acpt<=(o_acpt+1) MOD 16; + + -- Shift two more pixels to the right before ending line. + o_last1<=o_last; + o_last2<=o_last1; + + IF shift_onext(o_acpt,o_format) THEN + o_ad<=(o_ad+1) MOD (2*BLEN); + END IF; + + IF o_adturn='1' AND (shift_onext((o_acpt+1) MOD 16,o_format)) AND + (((o_ad MOD BLEN=0) AND o_lastv(0)='0') OR o_last2='1') THEN + o_copy<=sWAIT; + lev_dec_v:='1'; + END IF; + + IF o_ad MOD BLEN=4 THEN + o_adturn<='1'; + END IF; + END IF; + END CASE; + + o_acpt1<=o_acpt; o_acpt2<=o_acpt1; o_acpt3<=o_acpt2; o_acpt4<=o_acpt3; + o_ad1<=o_ad; o_ad2<=o_ad1; o_ad3<=o_ad2; + o_sh1<=o_sh; o_sh2<=o_sh1; o_sh3<=o_sh2; o_sh4<=o_sh3; + o_lastt1<=o_last; o_lastt2<=o_lastt1; + o_lastt3<=o_lastt2; o_lastt4<=o_lastt3; + + ------------------------------------------------------ + IF o_sh3='1' THEN + shift_v:=shift_opack(o_acpt4,o_shift,o_dr,o_format); + o_shift<=shift_v; + o_hpixs<=shift_opix(shift_v,o_format); + END IF; + + IF o_sh4='1' THEN + hpix_v:=o_hpixs; + IF o_format(4)='1' THEN -- Swap B <-> R + hpix_v:=(r=>o_hpixs.b,g=>o_hpixs.g,b=>o_hpixs.r); + END IF; + IF o_format(2 DOWNTO 0)="011" THEN + -- 8bpp indexed colour mode + hpix_v:=(r=>o_fb_pal_dr(23 DOWNTO 16),g=>o_fb_pal_dr(15 DOWNTO 8), + b=>o_fb_pal_dr(7 DOWNTO 0)); + END IF; + o_hpix0<=hpix_v; + o_hpix1<=o_hpix0; + o_hpix2<=o_hpix1; + o_hpix3<=o_hpix2; + + IF o_first='1' THEN + -- Left edge. Duplicate first pixel + o_hpix1<=hpix_v; + o_hpix2<=hpix_v; + o_first<='0'; + END IF; + IF o_lastt4='1' THEN + -- Right edge. Keep last pixel. + o_hpix0<=o_hpix0; + END IF; + END IF; + + ------------------------------------------------------ + -- lev_inc : read start + -- lev_dec : end of copy + -- READLEV : Number of ongoing Avalon Reads + IF lev_dec_v='0' AND lev_inc_v='1' THEN + o_readlev<=o_readlev+1; + ELSIF lev_dec_v='1' AND lev_inc_v='0' THEN + o_readlev<=o_readlev-1; + END IF; + + -- COPYLEV : Number of ongoing copies to line buffers + IF lev_dec_v='1' AND o_readdataack='0' THEN + o_copylev<=o_copylev-1; + ELSIF lev_dec_v='0' AND o_readdataack='1' THEN + o_copylev<=o_copylev+1; + END IF; + + -- FIFOs + IF lev_dec_v='1' THEN + o_primv(0 TO 1)<=o_primv(1 TO 2); -- First buffer of line + o_lastv(0 TO 1)<=o_lastv(1 TO 2); -- Last buffer of line + o_bibv (0 TO 1)<=o_bibv (1 TO 2); -- Double buffer select + o_off (0 TO 1)<=o_off (1 TO 2); -- Start offset + END IF; + + IF lev_inc_v='1' THEN + IF o_readlev=0 OR (o_readlev=1 AND lev_dec_v='1') THEN + o_primv(0)<=prim_v; + o_lastv(0)<=last_v; + o_bibv (0)<=bib_v; + o_off (0)<=off_v; + ELSIF (o_readlev=1 AND lev_dec_v='0') OR + (o_readlev=2 AND lev_dec_v='1') THEN + o_primv(1)<=prim_v; + o_lastv(1)<=last_v; + o_bibv (1)<=bib_v; + o_off (1)<=off_v; + END IF; + o_primv(2)<=prim_v; + o_lastv(2)<=last_v; + o_bibv (2)<=bib_v; + o_off (2)<=off_v; + END IF; + + ------------------------------------------------------ + END IF; + END PROCESS Scalaire; + + o_h_poly_a<=to_integer(o_hfrac1(11 DOWNTO 12-FRAC)); + o_v_poly_a<=to_integer(o_vfrac(11 DOWNTO 12-FRAC)); + + o_h_poly_dr<=o_h_poly(o_h_poly_a) WHEN rising_edge(o_clk); + o_v_poly_dr<=o_v_poly(o_v_poly_a) WHEN rising_edge(o_clk); + + -- Framebuffer palette + GenPal1:IF PALETTE GENERATE + Tempera1:PROCESS(pal1_clk) IS + BEGIN + IF rising_edge(pal1_clk) THEN + IF pal1_wr='1' THEN + pal1_mem(to_integer(pal1_a))<=pal1_dw; + END IF; + pal1_dr<=pal1_mem(to_integer(pal1_a)); + END IF; + END PROCESS; + + pal_idx <= shift_opack(o_acpt4,o_shift,o_dr,o_format)(0 TO 7); + pal_idx_lsb <= pal_idx(0) WHEN rising_edge(o_clk); + o_fb_pal_dr_x2 <= pal1_mem(to_integer(pal_idx(7 DOWNTO 1))) WHEN rising_edge(o_clk); + END GENERATE GenPal1; + + GenPal2:IF PALETTE and PALETTE2 GENERATE + Tempera2:PROCESS(pal2_clk) IS + BEGIN + IF rising_edge(pal2_clk) THEN + IF pal2_wr='1' THEN + pal2_mem(to_integer(pal2_a))<=pal2_dw; + END IF; + pal2_dr<=pal2_mem(to_integer(pal2_a)); + END IF; + END PROCESS; + + o_fb_pal_dr2 <= pal2_mem(to_integer(pal_idx(7 DOWNTO 0))) WHEN rising_edge(o_clk); + o_fb_pal_dr <= o_fb_pal_dr2 when pal_n = '1' else o_fb_pal_dr_x2(47 DOWNTO 24) WHEN pal_idx_lsb = '1' ELSE o_fb_pal_dr_x2(23 DOWNTO 0); + END GENERATE GenPal2; + + GenPal1not2:IF PALETTE and not PALETTE2 GENERATE + o_fb_pal_dr <= o_fb_pal_dr_x2(47 DOWNTO 24) WHEN pal_idx_lsb = '1' ELSE o_fb_pal_dr_x2(23 DOWNTO 0); + END GENERATE GenPal1not2; + + GenNoPal:IF NOT PALETTE GENERATE + o_fb_pal_dr<=x"000000"; + END GENERATE GenNoPal; + + ----------------------------------------------------------------------------- + -- Polyphase ROMs + Polikarpov:PROCESS(poly_clk) IS + BEGIN + IF rising_edge(poly_clk) THEN + IF poly_wr='1' THEN + poly_tdw(8+9*(3-to_integer(poly_a(1 DOWNTO 0))) DOWNTO + 9*(3-to_integer(poly_a(1 DOWNTO 0))))<=poly_dw; + END IF; + + poly_h_wr<=poly_wr AND NOT poly_a(FRAC+2); + poly_v_wr<=poly_wr AND poly_a(FRAC+2); + poly_a2<=poly_a(FRAC+1 DOWNTO 2); + + IF poly_h_wr='1' THEN + o_h_poly(to_integer(poly_a2))<=poly_tdw; + END IF; + IF poly_v_wr='1' THEN + o_v_poly(to_integer(poly_a2))<=poly_tdw; + END IF; + END IF; + END PROCESS Polikarpov; + + ----------------------------------------------------------------------------- + -- Horizontal Scaler + HSCAL:PROCESS(o_clk) IS + VARIABLE div_v : unsigned(18 DOWNTO 0); + VARIABLE dir_v : unsigned(11 DOWNTO 0); + BEGIN + IF rising_edge(o_clk) THEN + -- Pipeline signals + ----------------------------------- + -- Pipelined 6 bits non-restoring divider. Cycle 1 + dir_v:=x"000"; + div_v:=to_unsigned(o_hacc * 64,19); + + div_v:=div_v-to_unsigned(o_hsize*64,19); + dir_v(11):=NOT div_v(18); + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*32,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*32,19); + END IF; + dir_v(10):=NOT div_v(18); + o_div<=div_v; + o_dir<=dir_v; + + -- Cycle 2 + div_v:=o_div; + dir_v:=o_dir; + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*16,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*16,19); + END IF; + dir_v( 9):=NOT div_v(18); + + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*8,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*8,19); + END IF; + dir_v(8):=NOT div_v(18); + o_div2<=div_v; + o_dir2<=dir_v; + + -- Cycle 3 + div_v:=o_div2; + dir_v:=o_dir2; + IF FRAC>4 THEN + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*4,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*4,19); + END IF; + dir_v(7):=NOT div_v(18); + IF div_v(18)='0' THEN + div_v:=div_v-to_unsigned(o_hsize*2,19); + ELSE + div_v:=div_v+to_unsigned(o_hsize*2,19); + END IF; + dir_v(6):=NOT div_v(18); + END IF; + + ----------------------------------- + o_hfrac<=dir_v; + o_hfrac1<=o_hfrac; o_hfrac2<=o_hfrac1; + o_hfrac3<=o_hfrac2; o_hfrac4<=o_hfrac3; + + o_copyv(1 TO 8)<=o_copyv(0 TO 7); + + o_dcptv(1)<=o_dcpt; + IF o_dcptv(1)>=o_hsize THEN + o_copyv(2)<='0'; + END IF; + o_dcptv(2)<=o_dcptv(1) MOD OHRES; + o_dcptv(3 TO 8)<=o_dcptv(2 TO 7); + + o_hpixq<=(o_hpix3,o_hpix2,o_hpix1,o_hpix0); + + -- NEAREST / BILINEAR / SHARP BILINEAR --------------- + -- C1 : Pre-calc Sharp Bilinear + o_h_sbil_t<=sbil_frac1(o_hfrac1); + + -- C2 : Select + o_h_frac2<=(OTHERS =>'0'); + CASE o_hmode(1 DOWNTO 0) IS + WHEN "00" => -- Nearest + IF MASK(MASK_NEAREST)='1' THEN + o_h_frac2<=near_frac(o_hfrac2); + END IF; + WHEN "01" => -- Bilinear + IF MASK(MASK_BILINEAR)='1' THEN + o_h_frac2<=bil_frac(o_hfrac2); + END IF; + WHEN "10" => -- Sharp Bilinear + IF MASK(MASK_SHARP_BILINEAR)='1' THEN + o_h_frac2<=sbil_frac2(o_hfrac2,o_h_sbil_t); + END IF; + WHEN OTHERS => + NULL; + END CASE; + + -- C3 : Opposite frac + o_h_bil_t<=bil_calc(o_h_frac2,o_hpixq); + + -- C4 : Nearest / Bilinear / Sharp Bilinear + o_h_bil_pix.r<=bound(o_h_bil_t.r,8+FRAC); + o_h_bil_pix.g<=bound(o_h_bil_t.g,8+FRAC); + o_h_bil_pix.b<=bound(o_h_bil_t.b,8+FRAC); + + -- BICUBIC ------------------------------------------- + -- C1 : Bicubic coefficients A,B,C,D + + -- C2 : Bicubic calc T1 = X.D + C + o_h_bic_abcd1<=bic_calc0(o_hfrac2,(o_hpix3,o_hpix2,o_hpix1,o_hpix0)); + o_h_bic_tt1<=bic_calc1(o_hfrac2, + bic_calc0(o_hfrac2,(o_hpix3,o_hpix2,o_hpix1,o_hpix0))); + + -- C3 : Bicubic calc T2 = X.T1 + B + o_h_bic_abcd2<=o_h_bic_abcd1; + o_h_bic_tt2<=bic_calc2(o_hfrac3,o_h_bic_tt1,o_h_bic_abcd1); + + -- C4 : Bicubic final Y = X.T2 + A + o_h_bic_pix<=bic_calc3(o_hfrac4,o_h_bic_tt2,o_h_bic_abcd2); + + -- POLYPHASE ----------------------------------------- + -- C1 : Read memory + + -- C2 : Filter calc + o_h_poly_dr2<=o_h_poly_dr; + + -- C3 : Add + o_h_poly_t<=poly_calc1(o_h_poly_dr2,o_hpixq); + + -- C4 : Bounding + o_h_poly_pix<=poly_calc2(o_h_poly_t); + + -- C5 : Select interpoler ---------------------------- + o_wadl<=o_dcptv(8); + o_wr<=o_altx AND (o_copyv(8) & o_copyv(8) & o_copyv(8) & o_copyv(8)); + o_ldw<=(x"00",x"00",x"00"); + + CASE o_hmode(2 DOWNTO 0) IS + WHEN "000" | "001" | "010" => -- Nearest | Bilinear | Sharp Bilinear + IF MASK(MASK_NEAREST)='1' OR + MASK(MASK_BILINEAR)='1' OR + MASK(MASK_SHARP_BILINEAR)='1' THEN + o_ldw<=o_h_bil_pix; + END IF; + WHEN "011" => -- BiCubic + IF MASK(MASK_BICUBIC)='1' THEN + o_ldw<=o_h_bic_pix; + END IF; + WHEN OTHERS => -- PolyPhase + IF MASK(MASK_POLY)='1' THEN + o_ldw<=o_h_poly_pix; + END IF; + END CASE; + ------------------------------------------------------ + END IF; + END PROCESS HSCAL; + + ----------------------------------------------------------------------------- + -- Line buffers 4 x OHRES x (R+G+B) + OLBUF:PROCESS(o_clk) IS + BEGIN + IF rising_edge(o_clk) THEN + -- WRITES + IF o_wr(0)='1' THEN o_line0(o_wadl)<=o_ldw; END IF; + IF o_wr(1)='1' THEN o_line1(o_wadl)<=o_ldw; END IF; + IF o_wr(2)='1' THEN o_line2(o_wadl)<=o_ldw; END IF; + IF o_wr(3)='1' THEN o_line3(o_wadl)<=o_ldw; END IF; + + -- READS + o_ldr0<=o_line0(o_radl); + o_ldr1<=o_line1(o_radl); + o_ldr2<=o_line2(o_radl); + o_ldr3<=o_line3(o_radl); + END IF; + END PROCESS OLBUF; + + ----------------------------------------------------------------------------- + -- Output video sweep + OSWEEP:PROCESS(o_clk) IS + BEGIN + IF rising_edge(o_clk) THEN + IF o_ce='1' THEN + -- Output pixels count + IF o_hcpt+1=o_vtotal THEN + o_vcpt_pre3<=0; + ELSE + o_vcpt_pre3<=(o_vcpt_pre3+1) MOD 4096; + END IF; + o_vcpt_pre2<=o_vcpt_pre3; + o_vcpt_pre<=o_vcpt_pre2; + o_vcpt<=o_vcpt_pre; + END IF; + + o_end(0)<=to_std_logic(o_vcpt>=o_vdisp); + o_dev(0)<=to_std_logic(o_hcpt=o_hmin AND o_hcpt<=o_hmax AND + o_vcpt>=o_vmin AND o_vcpt<=o_vmax); + o_hsv(0)<=to_std_logic(o_hcpt>=o_hsstart AND o_hcpt=o_hsstart) OR + (o_vcpt>o_vsstart AND o_vcpt=o_vmin AND o_vcpt_pre2<=o_vmax); + o_hsv(1 TO 5)<=o_hsv(0 TO 4); + o_vsv(1 TO 5)<=o_vsv(0 TO 4); + o_dev(1 TO 5)<=o_dev(0 TO 4); + o_pev(1 TO 5)<=o_pev(0 TO 4); + o_end(1 TO 5)<=o_end(0 TO 4); + + IF o_run='0' THEN + o_hsv(2)<='0'; + o_vsv(2)<='0'; + o_dev(2)<='0'; + o_pev(2)<='0'; + o_end(2)<='0'; + END IF; + + END IF; + END IF; + + END PROCESS OSWEEP; + + ----------------------------------------------------------------------------- + -- Vertical Scaler + VSCAL:PROCESS(o_clk) IS + VARIABLE pixq_v : arr_pix(0 TO 3); + BEGIN + IF rising_edge(o_clk) THEN + IF o_ce='1' THEN + -- CYCLE 1 ----------------------------------------- + -- Read mem + o_radl<=(o_hcpt - o_hmin + OHRES) MOD OHRES; + + -- CYCLE 2 ----------------------------------------- + -- Lines reordering + CASE o_vacpt(1 DOWNTO 0) IS + WHEN "10" => pixq_v:=(o_ldr0,o_ldr1,o_ldr2,o_ldr3); + WHEN "11" => pixq_v:=(o_ldr1,o_ldr2,o_ldr3,o_ldr0); + WHEN "00" => pixq_v:=(o_ldr2,o_ldr3,o_ldr0,o_ldr1); + WHEN OTHERS => pixq_v:=(o_ldr3,o_ldr0,o_ldr1,o_ldr2); + END CASE; + + o_vpixq<=pixq_v; + + -- Bottom edge : replicate last line + IF to_integer(o_vacpt)=o_ivsize THEN + o_vpixq(2)<=pixq_v(2); + END IF; + IF to_integer(o_vacpt)>=o_ivsize+1 THEN + o_vpixq(2)<=pixq_v(1); + o_vpixq(1)<=pixq_v(1); + END IF; + + o_vpixq1<=o_vpixq; + + -- NEAREST / BILINEAR / SHARP BILINEAR ------------- + -- C3 : Pre-calc Sharp Bilinear + o_v_sbil_t<=sbil_frac1(o_vfrac); + + -- C4 : Select + o_v_frac<=(OTHERS =>'0'); + CASE o_vmode(1 DOWNTO 0) IS + WHEN "00" => -- Nearest + IF MASK(MASK_NEAREST)='1' THEN + o_v_frac<=near_frac(o_vfrac); + END IF; + WHEN "01" => -- Bilinear + IF MASK(MASK_BILINEAR)='1' THEN + o_v_frac<=bil_frac(o_vfrac); + END IF; + WHEN "10" => -- Sharp Bilinear + IF MASK(MASK_SHARP_BILINEAR)='1' THEN + o_v_frac<=sbil_frac2(o_vfrac,o_v_sbil_t); + END IF; + WHEN OTHERS => NULL; + END CASE; + + o_v_bil_t<=bil_calc(o_v_frac,o_vpixq1); + + -- C6 : Nearest / Bilinear / Sharp Bilinear + o_v_bil_pix.r<=bound(o_v_bil_t.r,8+FRAC); + o_v_bil_pix.g<=bound(o_v_bil_t.g,8+FRAC); + o_v_bil_pix.b<=bound(o_v_bil_t.b,8+FRAC); + + -- BICUBIC ----------------------------------------- + -- C3 : Bicubic coefficients A,B,C,D + + -- C4 : Bicubic calc T1 = X.D + C + o_v_bic_abcd1<=bic_calc0(o_vfrac,o_vpixq); + o_v_bic_tt1<=bic_calc1(o_vfrac,bic_calc0(o_vfrac,o_vpixq)); + + -- C5 : Bicubic calc T2 = X.T1 + B + o_v_bic_abcd2<=o_v_bic_abcd1; + o_v_bic_tt2<=bic_calc2(o_vfrac,o_v_bic_tt1,o_v_bic_abcd1); + + -- C6 : Bicubic final Y = X.T2 + A + o_v_bic_pix<=bic_calc3(o_vfrac,o_v_bic_tt2,o_v_bic_abcd2); + + -- POLYPHASE --------------------------------------- + -- C3 : Read memory + + -- C4 : Filter calc + o_v_poly_dr2<=o_v_poly_dr; + + -- C5 : Add + o_v_poly_t<=poly_calc1(o_v_poly_dr2,o_vpixq1); + + -- C6 : Bounding + o_v_poly_pix<=poly_calc2(o_v_poly_t); + + -- CYCLE 6 ----------------------------------------- + o_hs<=o_hsv(5); + o_vs<=o_vsv(5); + o_de<=o_dev(5); + o_vbl<=o_end(5); + o_r<=x"00"; + o_g<=x"00"; + o_b<=x"00"; + + CASE o_vmode(2 DOWNTO 0) IS + WHEN "000" | "001" | "010" => -- Nearest | Bilinear | Sharp Bilinear + IF MASK(MASK_NEAREST)='1' OR + MASK(MASK_BILINEAR)='1' OR + MASK(MASK_SHARP_BILINEAR)='1' THEN + o_r<=o_v_bil_pix.r; + o_g<=o_v_bil_pix.g; + o_b<=o_v_bil_pix.b; + END IF; + WHEN "011" => -- BiCubic + IF MASK(MASK_BICUBIC)='1' THEN + o_r<=o_v_bic_pix.r; + o_g<=o_v_bic_pix.g; + o_b<=o_v_bic_pix.b; + END IF; + + WHEN OTHERS => -- Polyphase + IF MASK(MASK_POLY)='1' THEN + o_r<=o_v_poly_pix.r; + o_g<=o_v_poly_pix.g; + o_b<=o_v_poly_pix.b; + END IF; + END CASE; + + IF o_pev(5)='0' THEN + o_r<=o_border(23 DOWNTO 16); -- Copy border colour + o_g<=o_border(15 DOWNTO 8); + o_b<=o_border(7 DOWNTO 0); + END IF; + + ---------------------------------------------------- + END IF; + END IF; + + END PROCESS VSCAL; + + ----------------------------------------------------------------------------- + -- Low Lag syntoniser interface + o_lltune<=(0 => i_vss, + 1 => i_pde, + 2 => i_inter, + 3 => i_flm, + 4 => o_vss, + 5 => i_pce, + 6 => i_clk, + 7 => o_clk, + OTHERS =>'0'); + + ---------------------------------------------------------------------------- +END ARCHITECTURE rtl; diff --git a/sys/audio_out.v b/sys/audio_out.v new file mode 100644 index 0000000..0f748e0 --- /dev/null +++ b/sys/audio_out.v @@ -0,0 +1,296 @@ + +module audio_out +#( + parameter CLK_RATE = 24576000 +) +( + input reset, + input clk, + + //0 - 48KHz, 1 - 96KHz + input sample_rate, + + input [31:0] flt_rate, + input [39:0] cx, + input [7:0] cx0, + input [7:0] cx1, + input [7:0] cx2, + input [23:0] cy0, + input [23:0] cy1, + input [23:0] cy2, + + input [4:0] att, + input [1:0] mix, + + input is_signed, + input [15:0] core_l, + input [15:0] core_r, + + input [15:0] alsa_l, + input [15:0] alsa_r, + + // I2S + output i2s_bclk, + output i2s_lrclk, + output i2s_data, + + // SPDIF + output spdif, + + // Sigma-Delta DAC + output dac_l, + output dac_r +); + +localparam AUDIO_RATE = 48000; +localparam AUDIO_DW = 16; + +localparam CE_RATE = AUDIO_RATE*AUDIO_DW*8; +localparam FILTER_DIV = (CE_RATE/(AUDIO_RATE*32))-1; + +wire [31:0] real_ce = sample_rate ? {CE_RATE[30:0],1'b0} : CE_RATE[31:0]; + +reg mclk_ce; +always @(posedge clk) begin + reg [31:0] cnt; + + mclk_ce = 0; + cnt = cnt + real_ce; + if(cnt >= CLK_RATE) begin + cnt = cnt - CLK_RATE; + mclk_ce = 1; + end +end + +reg i2s_ce; +always @(posedge clk) begin + reg div; + i2s_ce <= 0; + if(mclk_ce) begin + div <= ~div; + i2s_ce <= div; + end +end + +i2s i2s +( + .reset(reset), + + .clk(clk), + .ce(i2s_ce), + + .sclk(i2s_bclk), + .lrclk(i2s_lrclk), + .sdata(i2s_data), + + .left_chan(al), + .right_chan(ar) +); + +spdif toslink +( + .rst_i(reset), + + .clk_i(clk), + .bit_out_en_i(mclk_ce), + + .sample_i({ar,al}), + .spdif_o(spdif) +); + +sigma_delta_dac #(15) sd_l +( + .CLK(clk), + .RESET(reset), + .DACin({~al[15], al[14:0]}), + .DACout(dac_l) +); + +sigma_delta_dac #(15) sd_r +( + .CLK(clk), + .RESET(reset), + .DACin({~ar[15], ar[14:0]}), + .DACout(dac_r) +); + +reg sample_ce; +always @(posedge clk) begin + reg [8:0] div = 0; + reg [1:0] add = 0; + + div <= div + add; + if(!div) begin + div <= 2'd1 << sample_rate; + add <= 2'd1 << sample_rate; + end + + sample_ce <= !div; +end + +reg flt_ce; +always @(posedge clk) begin + reg [31:0] cnt = 0; + + flt_ce = 0; + cnt = cnt + {flt_rate[30:0],1'b0}; + if(cnt >= CLK_RATE) begin + cnt = cnt - CLK_RATE; + flt_ce = 1; + end +end + +reg [15:0] cl,cr; +always @(posedge clk) begin + reg [15:0] cl1,cl2; + reg [15:0] cr1,cr2; + + cl1 <= core_l; cl2 <= cl1; + if(cl2 == cl1) cl <= cl2; + + cr1 <= core_r; cr2 <= cr1; + if(cr2 == cr1) cr <= cr2; +end + +reg a_en1 = 0, a_en2 = 0; +always @(posedge clk, posedge reset) begin + reg [1:0] dly1 = 0; + reg [14:0] dly2 = 0; + + if(reset) begin + dly1 <= 0; + dly2 <= 0; + a_en1 <= 0; + a_en2 <= 0; + end + else begin + if(flt_ce) begin + if(~&dly1) dly1 <= dly1 + 1'd1; + else a_en1 <= 1; + end + + if(sample_ce) begin + if(!dly2[13+sample_rate]) dly2 <= dly2 + 1'd1; + else a_en2 <= 1; + end + end +end + +wire [15:0] acl, acr; +IIR_filter #(.use_params(0)) IIR_filter +( + .clk(clk), + .reset(reset), + + .ce(flt_ce & a_en1), + .sample_ce(sample_ce), + + .cx(cx), + .cx0(cx0), + .cx1(cx1), + .cx2(cx2), + .cy0(cy0), + .cy1(cy1), + .cy2(cy2), + + .input_l({~is_signed ^ cl[15], cl[14:0]}), + .input_r({~is_signed ^ cr[15], cr[14:0]}), + .output_l(acl), + .output_r(acr) +); + +wire [15:0] adl; +DC_blocker dcb_l +( + .clk(clk), + .ce(sample_ce), + .sample_rate(sample_rate), + .mute(~a_en2), + .din(acl), + .dout(adl) +); + +wire [15:0] adr; +DC_blocker dcb_r +( + .clk(clk), + .ce(sample_ce), + .sample_rate(sample_rate), + .mute(~a_en2), + .din(acr), + .dout(adr) +); + +wire [15:0] al, audio_l_pre; +aud_mix_top audmix_l +( + .clk(clk), + .ce(sample_ce), + .att(att), + .mix(mix), + + .core_audio(adl), + .pre_in(audio_r_pre), + .linux_audio(alsa_l), + + .pre_out(audio_l_pre), + .out(al) +); + +wire [15:0] ar, audio_r_pre; +aud_mix_top audmix_r +( + .clk(clk), + .ce(sample_ce), + .att(att), + .mix(mix), + + .core_audio(adr), + .pre_in(audio_l_pre), + .linux_audio(alsa_r), + + .pre_out(audio_r_pre), + .out(ar) +); + +endmodule + +module aud_mix_top +( + input clk, + input ce, + + input [4:0] att, + input [1:0] mix, + + input [15:0] core_audio, + input [15:0] linux_audio, + input [15:0] pre_in, + + output reg [15:0] pre_out = 0, + output reg [15:0] out = 0 +); + +reg signed [16:0] a1, a2, a3, a4; +always @(posedge clk) if (ce) begin + + a1 <= {core_audio[15],core_audio}; + a2 <= a1 + {linux_audio[15],linux_audio}; + + pre_out <= a2[16:1]; + + case(mix) + 0: a3 <= a2; + 1: a3 <= $signed(a2) - $signed(a2[16:3]) + $signed(pre_in[15:2]); + 2: a3 <= $signed(a2) - $signed(a2[16:2]) + $signed(pre_in[15:1]); + 3: a3 <= {a2[16],a2[16:1]} + {pre_in[15],pre_in}; + endcase + + if(att[4]) a4 <= 0; + else a4 <= a3 >>> att[3:0]; + + //clamping + out <= ^a4[16:15] ? {a4[16],{15{a4[15]}}} : a4[15:0]; +end + +endmodule diff --git a/sys/build_id.tcl b/sys/build_id.tcl index 8777a14..bb2dc67 100644 --- a/sys/build_id.tcl +++ b/sys/build_id.tcl @@ -1,25 +1,29 @@ # Build TimeStamp Verilog Module # Jeff Wiencrot - 8/1/2011 +# Sorgelig - 02/11/2019 proc generateBuildID_Verilog {} { # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) - set buildDate [ clock format [ clock seconds ] -format %y%m%d ] - set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + set buildDate "`define BUILD_DATE \"[clock format [ clock seconds ] -format %y%m%d]\"" # Create a Verilog file for output set outputFileName "build_id.v" - set outputFile [open $outputFileName "w"] + + set fileData "" + if { [file exists $outputFileName]} { + set outputFile [open $outputFileName "r"] + set fileData [read $outputFile] + close $outputFile + } - # Output the Verilog source - puts $outputFile "`define BUILD_DATE \"$buildDate\"" - puts $outputFile "`define BUILD_TIME \"$buildTime\"" - close $outputFile - - # Send confirmation message to the Messages window - post_message "Generated build identification Verilog module: [pwd]/$outputFileName" - post_message "Date: $buildDate" - post_message "Time: $buildTime" + if {$buildDate ne $fileData} { + set outputFile [open $outputFileName "w"] + puts -nonewline $outputFile $buildDate + close $outputFile + # Send confirmation message to the Messages window + post_message "Generated: [pwd]/$outputFileName: $buildDate" + } } # Build CDF file diff --git a/sys/ddr_svc.sv b/sys/ddr_svc.sv new file mode 100644 index 0000000..abcd4fa --- /dev/null +++ b/sys/ddr_svc.sv @@ -0,0 +1,108 @@ +// +// Copyright (c) 2020 Alexey Melnikov +// +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ------------------------------------------ +// + +// 16-bit version + +module ddr_svc +( + input clk, + + input ram_waitrequest, + output [7:0] ram_burstcnt, + output [28:0] ram_addr, + input [63:0] ram_readdata, + input ram_read_ready, + output reg ram_read, + output [63:0] ram_writedata, + output [7:0] ram_byteenable, + output reg ram_write, + + output [7:0] ram_bcnt, + + input [31:3] ch0_addr, + input [7:0] ch0_burst, + output [63:0] ch0_data, + input ch0_req, + output ch0_ready, + + input [31:3] ch1_addr, + input [7:0] ch1_burst, + output [63:0] ch1_data, + input ch1_req, + output ch1_ready +); + +assign ram_burstcnt = ram_burst; +assign ram_byteenable = 8'hFF; +assign ram_addr = ram_address; +assign ram_writedata = 0; + +assign ch0_data = ram_q[0]; +assign ch1_data = ram_q[1]; +assign ch0_ready = ready[0]; +assign ch1_ready = ready[1]; + +reg [7:0] ram_burst; +reg [63:0] ram_q[2]; +reg [31:3] ram_address; +reg [1:0] ack = 0; +reg [1:0] ready; +reg state = 0; +reg ch = 0; + +always @(posedge clk) begin + ready <= 0; + + if(!ram_waitrequest) begin + ram_read <= 0; + ram_write <= 0; + + case(state) + 0: if(ch0_req != ack[0]) begin + ack[0] <= ch0_req; + ram_address <= ch0_addr; + ram_burst <= ch0_burst; + ram_read <= 1; + ch <= 0; + ram_bcnt <= 8'hFF; + state <= 1; + end + else if(ch1_req != ack[1]) begin + ack[1] <= ch1_req; + ram_address <= ch1_addr; + ram_burst <= ch1_burst; + ram_read <= 1; + ch <= 1; + ram_bcnt <= 8'hFF; + state <= 1; + end + 1: begin + if(ram_read_ready) begin + ram_bcnt <= ram_bcnt + 1'd1; + ram_q[ch] <= ram_readdata; + ready[ch] <= 1; + if ((ram_bcnt+2'd2) == ram_burst) state <= 0; + end + end + endcase + end +end + +endmodule diff --git a/sys/f2sdram_safe_terminator.sv b/sys/f2sdram_safe_terminator.sv new file mode 100644 index 0000000..07085d7 --- /dev/null +++ b/sys/f2sdram_safe_terminator.sv @@ -0,0 +1,250 @@ +// ============================================================================ +// +// f2sdram_safe_terminator for MiSTer platform +// +// ============================================================================ +// Copyright (c) 2021 bellwood420 +// +// Background: +// +// Terminating a transaction of burst writing(/reading) in its midstream +// seems to cause an illegal state to f2sdram interface. +// +// Forced reset request that occurs when loading other core is inevitable. +// +// So if it happens exactly within the transaction period, +// unexpected issues with accessing to f2sdram interface will be caused +// in next loaded core. +// +// It seems that only way to reset broken f2sdram interface is to reset +// whole SDRAM Controller Subsystem from HPS via permodrst register +// in Reset Manager. +// But it cannot be done safely while Linux is running. +// It is usually done when cold or warm reset is issued in HPS. +// +// Main_MiSTer is issuing reset for FPGA <> HPS bridges +// via brgmodrst register in Reset Manager when loading rbf. +// But it has no effect on f2sdram interface. +// f2sdram interface seems to belong to SDRAM Controller Subsystem +// rather than FPGA-to-HPS bridge. +// +// Main_MiSTer is also trying to issuing reset for f2sdram ports +// via fpgaportrst register in SDRAM Controller Subsystem when loading rbf. +// But according to the Intel's document, fpgaportrst register can be +// used to stretch the port reset. +// It seems that it cannot be used to assert the port reset. +// +// According to the Intel's document, there seems to be a reset port on +// Avalon-MM slave interface, but it cannot be found in Qsys generated HDL. +// +// To conclude, the only thing FPGA can do is not to break the transaction. +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// +// Purpose: +// To prevent the issue, this module completes ongoing transaction +// on behalf of user logic, when reset is asserted. +// +// Usage: +// Insert this module into the bus line between +// f2sdram (Avalon-MM slave) and user logic (Avalon-MM master). +// +// Notice: +// Asynchronous reset request is not supported. +// Please feed reset request synchronized to clock. +// +module f2sdram_safe_terminator #( + parameter DATA_WIDTH = 64, + parameter BURSTCOUNT_WIDTH = 8 +) ( + // clk should be the same as one provided to f2sdram port + // clk should not be stop when reset is asserted + input clk, + // rst_req_sync should be synchronized to clk + // Asynchronous reset request is not supported + input rst_req_sync, + + // Master port: connecting to Alavon-MM slave(f2sdram) + input waitrequest_master, + output [BURSTCOUNT_WIDTH-1:0] burstcount_master, + output [ADDRESS_WITDH-1:0] address_master, + input [DATA_WIDTH-1:0] readdata_master, + input readdatavalid_master, + output read_master, + output [DATA_WIDTH-1:0] writedata_master, + output [BYTEENABLE_WIDTH-1:0] byteenable_master, + output write_master, + + // Slave port: connecting to Alavon-MM master(user logic) + output waitrequest_slave, + input [BURSTCOUNT_WIDTH-1:0] burstcount_slave, + input [ADDRESS_WITDH-1:0] address_slave, + output [DATA_WIDTH-1:0] readdata_slave, + output readdatavalid_slave, + input read_slave, + input [DATA_WIDTH-1:0] writedata_slave, + input [BYTEENABLE_WIDTH-1:0] byteenable_slave, + input write_slave +); + +localparam BYTEENABLE_WIDTH = DATA_WIDTH/8; +localparam ADDRESS_WITDH = 32-$clog2(BYTEENABLE_WIDTH); + +/* +* Capture init reset deaseert +*/ +reg init_reset_deasserted = 1'b0; + +always_ff @(posedge clk) begin + if (!rst_req_sync) begin + init_reset_deasserted <= 1'b1; + end +end + +/* +* Lock stage +*/ +reg lock_stage = 1'b0; + +always_ff @(posedge clk) begin + if (rst_req_sync) begin + // Reset assert + if (init_reset_deasserted) begin + lock_stage <= 1'b1; + end + end + else begin + // Reset deassert + lock_stage <= 1'b0; + end +end + +/* +* Write burst transaction observer +*/ +reg state_write = 1'b0; +wire next_state_write; + +wire burst_write_start = !state_write && next_state_write; +wire valid_write_data = state_write && !waitrequest_master; +wire burst_write_end = state_write && (write_burstcounter == write_burstcount_latch - 1'd1); +wire valid_non_burst_write = !state_write && write_slave && (burstcount_slave == 1) && !waitrequest_master; + +reg [BURSTCOUNT_WIDTH-1:0] write_burstcounter = 0; +reg [BURSTCOUNT_WIDTH-1:0] write_burstcount_latch = 0; +reg [ADDRESS_WITDH-1:0] write_address_latch = 0; + +always_ff @(posedge clk) begin + state_write <= next_state_write; + + if (burst_write_start) begin + write_burstcounter <= waitrequest_master ? 1'd0 : 1'd1; + write_burstcount_latch <= burstcount_slave; + write_address_latch <= address_slave; + end + else if (valid_write_data) begin + write_burstcounter <= write_burstcounter + 1'd1; + end +end + +always_comb begin + if (!state_write) begin + if (valid_non_burst_write) + next_state_write = 1'b0; + else if (write_slave) + next_state_write = 1'b1; + else + next_state_write = 1'b0; + end + else begin + if (burst_write_end) + next_state_write = 1'b0; + else + next_state_write = 1'b1; + end +end + +reg [BURSTCOUNT_WIDTH-1:0] write_terminate_counter = 0; +reg [BURSTCOUNT_WIDTH-1:0] burstcount_latch = 0; +reg [ADDRESS_WITDH-1:0] address_latch = 0; + +reg terminating = 0; +reg read_terminating = 0; +reg write_terminating = 0; + +wire on_write_transaction = state_write && next_state_write; +wire on_start_write_transaction = !state_write && next_state_write; + +always_ff @(posedge clk) begin + if (rst_req_sync) begin + // Reset assert + if (init_reset_deasserted) begin + if (!lock_stage) begin + // Even not knowing reading is in progress or not, + // if it is in progress, it will finish at some point, and no need to do anything. + // Assume that reading is in progress when we are not on write transaction. + burstcount_latch <= burstcount_slave; + address_latch <= address_slave; + terminating <= 1; + + if (on_write_transaction) begin + write_terminating <= 1; + burstcount_latch <= write_burstcount_latch; + address_latch <= write_address_latch; + write_terminate_counter <= waitrequest_master ? write_burstcounter : write_burstcounter + 1'd1; + end + else if (on_start_write_transaction) begin + if (!valid_non_burst_write) begin + write_terminating <= 1; + write_terminate_counter <= waitrequest_master ? 1'd0 : 1'd1; + end + end + else if (read_slave && waitrequest_master) begin + // Need to keep read signal, burstcount and address until waitrequest_master deasserted + read_terminating <= 1; + end + end + else if (!waitrequest_master) begin + read_terminating <= 0; + end + end + end + else begin + // Reset deassert + if (!write_terminating) terminating <= 0; + read_terminating <= 0; + end + + if (write_terminating) begin + // Continue write transaction until the end + if (!waitrequest_master) write_terminate_counter <= write_terminate_counter + 1'd1; + if (write_terminate_counter == burstcount_latch - 1'd1) write_terminating <= 0; + end +end + +/* +* Bus mux depending on the stage. +*/ +always_comb begin + if (terminating) begin + burstcount_master = burstcount_latch; + address_master = address_latch; + read_master = read_terminating; + write_master = write_terminating; + byteenable_master = 0; + end + else begin + burstcount_master = burstcount_slave; + address_master = address_slave; + read_master = read_slave; + byteenable_master = byteenable_slave; + write_master = write_slave; + end +end + +// Just passing master <-> slave +assign writedata_master = writedata_slave; +assign readdata_slave = readdata_master; +assign readdatavalid_slave = readdatavalid_master; +assign waitrequest_slave = waitrequest_master; + +endmodule diff --git a/sys/gamma_corr.sv b/sys/gamma_corr.sv new file mode 100644 index 0000000..321b83f --- /dev/null +++ b/sys/gamma_corr.sv @@ -0,0 +1,124 @@ +module gamma_corr +( + input clk_sys, + input clk_vid, + input ce_pix, + input gamma_en, + input gamma_wr, + input [9:0] gamma_wr_addr, + input [7:0] gamma_value, + input HSync, + input VSync, + input HBlank, + input VBlank, + input [23:0] RGB_in, + output reg HSync_out, + output reg VSync_out, + output reg HBlank_out, + output reg VBlank_out, + output reg [23:0] RGB_out +); + +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve[768]; + +always @(posedge clk_sys) if (gamma_wr) gamma_curve[gamma_wr_addr] <= gamma_value; +always @(posedge clk_vid) gamma <= gamma_curve[gamma_index]; + +reg [9:0] gamma_index; +reg [7:0] gamma; + +always @(posedge clk_vid) begin + reg [7:0] R_in, G_in, B_in; + reg [7:0] R_gamma, G_gamma; + reg hs,vs,hb,vb; + reg [1:0] ctr = 0; + reg old_ce; + + old_ce <= ce_pix; + if(~old_ce & ce_pix) begin + {R_in,G_in,B_in} <= RGB_in; + hs <= HSync; vs <= VSync; + hb <= HBlank; vb <= VBlank; + + RGB_out <= gamma_en ? {R_gamma,G_gamma,gamma} : {R_in,G_in,B_in}; + HSync_out <= hs; VSync_out <= vs; + HBlank_out <= hb; VBlank_out <= vb; + + ctr <= 1; + gamma_index <= {2'b00,RGB_in[23:16]}; + end + + if (|ctr) ctr <= ctr + 1'd1; + + case(ctr) + 1: begin gamma_index <= {2'b01,G_in}; end + 2: begin R_gamma <= gamma; gamma_index <= {2'b10,B_in}; end + 3: begin G_gamma <= gamma; end + endcase +end + +endmodule + +module gamma_fast +( + input clk_vid, + input ce_pix, + + inout [21:0] gamma_bus, + + input HSync, + input VSync, + input HBlank, + input VBlank, + input DE, + input [23:0] RGB_in, + + output reg HSync_out, + output reg VSync_out, + output reg HBlank_out, + output reg VBlank_out, + output reg DE_out, + output reg [23:0] RGB_out +); + +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_r[256]; +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_g[256]; +(* ramstyle="no_rw_check" *) reg [7:0] gamma_curve_b[256]; + +assign gamma_bus[21] = 1; +wire clk_sys = gamma_bus[20]; +wire gamma_en = gamma_bus[19]; +wire gamma_wr = gamma_bus[18]; +wire [9:0] gamma_wr_addr = gamma_bus[17:8]; +wire [7:0] gamma_value = gamma_bus[7:0]; + +always @(posedge clk_sys) if (gamma_wr) begin + case(gamma_wr_addr[9:8]) + 0: gamma_curve_r[gamma_wr_addr[7:0]] <= gamma_value; + 1: gamma_curve_g[gamma_wr_addr[7:0]] <= gamma_value; + 2: gamma_curve_b[gamma_wr_addr[7:0]] <= gamma_value; + endcase +end + +reg [7:0] gamma_index_r,gamma_index_g,gamma_index_b; + +always @(posedge clk_vid) begin + reg [7:0] R_in, G_in, B_in; + reg [7:0] R_gamma, G_gamma; + reg hs,vs,hb,vb,de; + + if(ce_pix) begin + {gamma_index_r,gamma_index_g,gamma_index_b} <= RGB_in; + hs <= HSync; vs <= VSync; + hb <= HBlank; vb <= VBlank; + de <= DE; + + RGB_out <= gamma_en ? {gamma_curve_r[gamma_index_r],gamma_curve_g[gamma_index_g],gamma_curve_b[gamma_index_b]} + : {gamma_index_r,gamma_index_g,gamma_index_b}; + HSync_out <= hs; VSync_out <= vs; + HBlank_out <= hb; VBlank_out <= vb; + DE_out <= de; + end +end + +endmodule diff --git a/sys/hdmi_config.sv b/sys/hdmi_config.sv index 0265c5c..4a0a13d 100644 --- a/sys/hdmi_config.sv +++ b/sys/hdmi_config.sv @@ -2,11 +2,15 @@ module hdmi_config ( // Host Side - input iCLK, - input iRST_N, + input iCLK, + input iRST_N, input dvi_mode, input audio_96k, + input [1:0] limited, + input ypbpr, + + output reg done, // I2C Side output I2C_SCL, @@ -24,13 +28,17 @@ i2c #(50_000_000, 20_000) i2c_av ( .CLK(iCLK), - .I2C_SCL(I2C_SCL), // I2C CLOCK - .I2C_SDA(I2C_SDA), // I2C DATA + .I2C_SCL(I2C_SCL), // I2C CLOCK + .I2C_SDA(I2C_SDA), // I2C DATA - .I2C_DATA({8'h72,init_data[LUT_INDEX]}), // DATA:[SLAVE_ADDR,SUB_ADDR,DATA]. 0x72 is the Slave Address of the ADV7513 chip! - .START(mI2C_GO), // START transfer - .END(mI2C_END), // END transfer - .ACK(mI2C_ACK) // ACK + .I2C_ADDR('h39), // 0x39 is the Slave Address of the ADV7513 chip! + .I2C_WLEN(1), + .I2C_WDATA1(init_data[LUT_INDEX][15:8]), // SUB_ADDR + .I2C_WDATA2(init_data[LUT_INDEX][7:0]), // DATA + .START(mI2C_GO), // START transfer + .READ(0), + .END(mI2C_END), // END transfer + .ACK(mI2C_ACK) // ACK ); ////////////////////// Config Control //////////////////////////// @@ -41,6 +49,7 @@ always@(posedge iCLK or negedge iRST_N) begin LUT_INDEX <= 0; mSetup_ST <= 0; mI2C_GO <= 0; + done <= 0; end else begin if(init_data[LUT_INDEX] != 16'hFFFF) begin case(mSetup_ST) @@ -58,13 +67,14 @@ always@(posedge iCLK or negedge iRST_N) begin end endcase end + else done <= 1; end end //////////////////////////////////////////////////////////////////// ///////////////////// Config Data LUT ////////////////////////// -wire [15:0] init_data[58] = +wire [15:0] init_data[82] = '{ 16'h9803, // ADI required Write. @@ -101,10 +111,32 @@ wire [15:0] init_data[58] = {8'h17, 8'b01100010}, // Aspect ratio 16:9 [1]=1, 4:3 [1]=0 - {8'h18, 8'b0100_0110}, // CSC disabled [7]=0. - // CSC Scaling Factor [6:5] b10 = +/- 4.0, -16384 - 16380. - // CSC Equation 3 [4:0] b00110. + {8'h18, ypbpr ? 8'h86 : limited[0] ? 8'h8D : limited[1] ? 8'h8E : 8'h00}, // CSC Scaling Factors and Coefficients for RGB Full->Limited. + {8'h19, ypbpr ? 8'hDF : limited[0] ? 8'hBC : 8'hFE}, // Taken from table in ADV7513 Programming Guide. + {8'h1A, ypbpr ? 8'h1A : 8'h00}, // CSC Channel A. + {8'h1B, ypbpr ? 8'h3F : 8'h00}, + {8'h1C, ypbpr ? 8'h1E : 8'h00}, + {8'h1D, ypbpr ? 8'hE2 : 8'h00}, + {8'h1E, ypbpr ? 8'h07 : 8'h01}, + {8'h1F, ypbpr ? 8'hE7 : 8'h00}, + {8'h20, ypbpr ? 8'h04 : 8'h00}, // CSC Channel B. + {8'h21, ypbpr ? 8'h1C : 8'h00}, + {8'h22, ypbpr ? 8'h08 : limited[0] ? 8'h0D : 8'h0E}, + {8'h23, ypbpr ? 8'h11 : limited[0] ? 8'hBC : 8'hFE}, + {8'h24, ypbpr ? 8'h01 : 8'h00}, + {8'h25, ypbpr ? 8'h91 : 8'h00}, + {8'h26, ypbpr ? 8'h01 : 8'h01}, + {8'h27, 8'h00}, + + {8'h28, ypbpr ? 8'h1D : 8'h00}, // CSC Channel C. + {8'h29, ypbpr ? 8'hAE : 8'h00}, + {8'h2A, ypbpr ? 8'h1B : 8'h00}, + {8'h2B, ypbpr ? 8'h73 : 8'h00}, + {8'h2C, ypbpr ? 8'h06 : limited[0] ? 8'h0D : 8'h0E}, + {8'h2D, ypbpr ? 8'hDF : limited[0] ? 8'hBC : 8'hFE}, + {8'h2E, ypbpr ? 8'h07 : 8'h01}, + {8'h2F, ypbpr ? 8'hE7 : 8'h00}, {8'h3B, 8'b0000_0000}, // Pixel repetition [6:5] b00 AUTO. [4:3] b00 x1 mult of input clock. [2:1] b00 x1 pixel rep to send to HDMI Rx. @@ -122,6 +154,11 @@ wire [15:0] init_data[58] = // Bar Info [3:2] b00 Bars invalid. b01 Bars vertical. b10 Bars horizontal. b11 Bars both. // Scan Info [1:0] b00 (No data). b01 TV. b10 PC. b11 None. + {8'h57, 1'b0, // [7] IT Content. 0 - No. 1 - Yes (type set in register h59). + 3'b000, // [6:4] Color space (ignored for RGB) + (ypbpr | limited) ? 2'b01 : 2'b10, // [3:2] RGB Quantization range + 2'b00}, // [1:0] Non-Uniform Scaled: 00 - None. 01 - Horiz. 10 - Vert. 11 - Both. + 16'h7301, {8'h94, 8'b1000_0000}, // [7]=1 HPD Interrupt ENabled. @@ -142,9 +179,9 @@ wire [15:0] init_data[58] = 16'hAA00, // ADI required Write. 16'hAB40, // ADI required Write. - {8'hAF, 6'b0001_01,~dvi_mode,1'b0}, // [7]=0 HDCP Disabled. + {8'hAF, 6'b0000_01,~dvi_mode,1'b0}, // [7]=0 HDCP Disabled. // [6:5] must be b00! - // [4]=1 Current frame IS HDCP encrypted!??? (HDCP disabled anyway?) + // [4]=0 Current frame is unencrypted // [3:2] must be b01! // [1]=1 HDMI Mode. // [0] must be b0! diff --git a/sys/hdmi_lite.sv b/sys/hdmi_lite.sv deleted file mode 100644 index ef80764..0000000 --- a/sys/hdmi_lite.sv +++ /dev/null @@ -1,395 +0,0 @@ -//============================================================================ -// -// HDMI Lite output module -// Copyright (C) 2017 Sorgelig -// -// This program is free software; you can redistribute it and/or modify it -// under the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 2 of the License, or (at your option) -// any later version. -// -//============================================================================ - - -module hdmi_lite -( - input reset, - - input clk_video, - input ce_pixel, - input video_vs, - input video_de, - input [23:0] video_d, - - input clk_hdmi, - input hdmi_hde, - input hdmi_vde, - output reg hdmi_de, - output [23:0] hdmi_d, - - input [11:0] screen_w, - input [11:0] screen_h, - input quadbuf, - - // 0-3 => scale 1-4 - input [1:0] scale_x, - input [1:0] scale_y, - input scale_auto, - - input clk_vbuf, - output [27:0] vbuf_address, - input [127:0] vbuf_readdata, - output [127:0] vbuf_writedata, - output [7:0] vbuf_burstcount, - output [15:0] vbuf_byteenable, - input vbuf_waitrequest, - input vbuf_readdatavalid, - output reg vbuf_read, - output reg vbuf_write -); - -localparam [7:0] burstsz = 64; - -reg [1:0] nbuf = 0; -wire [27:0] read_buf = {4'd2, 3'b000, (quadbuf ? nbuf-2'd1 : 2'b00), 19'd0}; -wire [27:0] write_buf = {4'd2, 3'b000, (quadbuf ? nbuf+2'd1 : 2'b00), 19'd0}; - -assign vbuf_address = vbuf_write ? vbuf_waddress : vbuf_raddress; -assign vbuf_burstcount = vbuf_write ? vbuf_wburstcount : vbuf_rburstcount; - -wire [95:0] hf_out; -wire [7:0] hf_usedw; -reg hf_reset = 0; - -vbuf_fifo out_fifo -( - .aclr(hf_reset), - - .wrclk(clk_vbuf), - .wrreq(vbuf_readdatavalid), - .data({vbuf_readdata[96+:24],vbuf_readdata[64+:24],vbuf_readdata[32+:24],vbuf_readdata[0+:24]}), - .wrusedw(hf_usedw), - - .rdclk(~clk_hdmi), - .rdreq(hf_rdreq), - .q(hf_out) -); - -reg [11:0] rd_stride; -wire [7:0] rd_burst = (burstsz < rd_stride) ? burstsz : rd_stride[7:0]; - -reg [27:0] vbuf_raddress; -reg [7:0] vbuf_rburstcount; -always @(posedge clk_vbuf) begin - reg [18:0] rdcnt; - reg [7:0] bcnt; - reg vde1, vde2; - reg [1:0] mcnt; - reg [1:0] my; - reg [18:0] fsz; - reg [11:0] strd; - - vde1 <= hdmi_vde; - vde2 <= vde1; - - if(vbuf_readdatavalid) begin - rdcnt <= rdcnt + 1'd1; - if(bcnt) bcnt <= bcnt - 1'd1; - vbuf_raddress <= vbuf_raddress + 1'd1; - end - - if(!bcnt && reading) reading <= 0; - - vbuf_read <= 0; - if(~vbuf_waitrequest) begin - if(!hf_reset && rdcnt=off_x) && (x<(vh_width+off_x)) && (y>=off_y) && (y<(vh_height+off_y)) && !hload && !pcnt; -wire de_in = hdmi_hde & hdmi_vde; - -always @(posedge clk_hdmi) begin - reg [71:0] px_out; - reg [1:0] mx; - reg vde; - - vde <= hdmi_vde; - - if(vde & ~hdmi_vde) begin - off_x <= (screen_w>v_width) ? (screen_w - v_width)>>1 : 12'd0; - off_y <= (screen_h>v_height) ? (screen_h - v_height)>>1 : 12'd0; - vh_height <= v_height; - vh_width <= v_width; - mx <= mult_x; - end - - pcnt <= pcnt + 1'd1; - if(pcnt == mx) begin - pcnt <= 0; - hload <= hload + 1'd1; - end - - if(~de_in || x (screen_h/2)) ? 2'b00 : (video_y > (screen_h/3)) ? 2'b01 : (video_y > (screen_h/4)) ? 2'b10 : 2'b11; -wire [1:0] tm_x = (l1_width > (screen_w/2)) ? 2'b00 : (l1_width > (screen_w/3)) ? 2'b01 : (l1_width > (screen_w/4)) ? 2'b10 : 2'b11; -wire [1:0] tm_xy = (tm_x < tm_y) ? tm_x : tm_y; -wire [1:0] tmf_y = scale_auto ? tm_xy : scale_y; -wire [1:0] tmf_x = scale_auto ? tm_xy : scale_x; -wire [11:0] t_height = video_y + (tmf_y[0] ? video_y : 12'd0) + (tmf_y[1] ? video_y<<1 : 12'd0); -wire [11:0] t_width = l1_width + (tmf_x[0] ? l1_width : 12'd0) + (tmf_x[1] ? l1_width<<1 : 12'd0); -wire [23:0] t_fsz = l1_stride * t_height; - -reg [11:0] l1_width; -reg [11:0] l1_stride; -always @(posedge clk_video) begin - reg [7:0] loaded = 0; - reg [11:0] strd = 0; - reg old_de = 0; - reg old_vs = 0; - - old_vs <= video_vs; - if(~old_vs & video_vs) begin - cur_addr<= write_buf; - video_x <= 0; - video_y <= 0; - loaded <= 0; - strd <= 0; - nbuf <= nbuf + 1'd1; - - stride <= l1_stride; - framesz <= t_fsz[18:0]; - v_height<= t_height; - v_width <= t_width; - mult_x <= tmf_x; - mult_y <= tmf_y; - end - - if(pix_wr) begin - case(video_x[1:0]) - 0: pix_acc <= video_d; // zeroes upper bits too - 1: pix_acc[47:24] <= video_d; - 2: pix_acc[71:48] <= video_d; - 3: loaded <= loaded + 1'd1; - endcase - if(video_x= burstsz) || (old_de & ~video_de)) begin - if(loaded + infifo_tail) begin - flush_size <= loaded + infifo_tail; - flush_addr <= cur_addr; - flush_req <= ~flush_req; - loaded <= 0; - strd <= strd + loaded; - end - - cur_addr <= cur_addr + loaded + infifo_tail; - if(~video_de) begin - if(video_y= 10'h3a0); // if u is inside (-16, 16) - wire u_inside = (u < 9'h10 || u >= 9'h1f0); + wire u_inside = (!u[8:4] || &u[8:4]); //(u < 9'h10 || u >= 9'h1f0); // if v is inside (-24, 24) wire v_inside = (v < 10'h18 || v >= 10'h3e8); assign result = !(y_inside && u_inside && v_inside); -endmodule -module InnerBlend -( - input [8:0] Op, - input [7:0] A, - input [7:0] B, - input [7:0] C, - output [7:0] O -); - - function [10:0] mul8x3; - input [7:0] op1; - input [2:0] op2; - begin - mul8x3 = 11'd0; - if(op2[0]) mul8x3 = mul8x3 + op1; - if(op2[1]) mul8x3 = mul8x3 + {op1, 1'b0}; - if(op2[2]) mul8x3 = mul8x3 + {op1, 2'b00}; - end - endfunction - - wire OpOnes = Op[4]; - wire [10:0] Amul = mul8x3(A, Op[7:5]); - wire [10:0] Bmul = mul8x3(B, {Op[3:2], 1'b0}); - wire [10:0] Cmul = mul8x3(C, {Op[1:0], 1'b0}); - wire [10:0] At = Amul; - wire [10:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; - wire [10:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; - wire [11:0] Res = {At, 1'b0} + Bt + Ct; - assign O = Op[8] ? A : Res[11:4]; endmodule module Blend ( + input clk, + input clk_en, input [5:0] rule, - input disable_hq2x, input [23:0] E, input [23:0] A, input [23:0] B, @@ -320,66 +309,63 @@ module Blend output [23:0] Result ); - reg [1:0] input_ctrl; - reg [8:0] op; - localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A - localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 - localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 - localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 - localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 - localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 - localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 - localparam AB = 2'b00; - localparam AD = 2'b01; - localparam DB = 2'b10; - localparam BD = 2'b11; - wire is_diff; - DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); + localparam BLEND1 = 7'b110_10_00; // (A * 12 + B * 4 ) >> 4 + localparam BLEND2 = 7'b100_10_10; // (A * 8 + B * 4 + C * 4) >> 4 + localparam BLEND3 = 7'b101_10_01; // (A * 10 + B * 4 + C * 2) >> 4 + localparam BLEND4 = 7'b110_01_01; // (A * 12 + B * 2 + C * 2) >> 4 + localparam BLEND5 = 7'b010_11_11; // (A * 4 + B * 6 + C * 6) >> 4 + localparam BLEND6 = 7'b111_00_00; // (A * 14 + B * 1 + C * 1) >> 4 - always @* begin - case({!is_diff, rule[5:2]}) - 1,17: {op, input_ctrl} = {BLEND1, AB}; - 2,18: {op, input_ctrl} = {BLEND1, DB}; - 3,19: {op, input_ctrl} = {BLEND1, BD}; - 4,20: {op, input_ctrl} = {BLEND2, DB}; - 5,21: {op, input_ctrl} = {BLEND2, AB}; - 6,22: {op, input_ctrl} = {BLEND2, AD}; - - 8: {op, input_ctrl} = {BLEND0, 2'bxx}; - 9: {op, input_ctrl} = {BLEND0, 2'bxx}; - 10: {op, input_ctrl} = {BLEND0, 2'bxx}; - 11: {op, input_ctrl} = {BLEND1, AB}; - 12: {op, input_ctrl} = {BLEND1, AB}; - 13: {op, input_ctrl} = {BLEND1, AB}; - 14: {op, input_ctrl} = {BLEND1, DB}; - 15: {op, input_ctrl} = {BLEND1, BD}; - - 24: {op, input_ctrl} = {BLEND2, DB}; - 25: {op, input_ctrl} = {BLEND5, DB}; - 26: {op, input_ctrl} = {BLEND6, DB}; - 27: {op, input_ctrl} = {BLEND2, DB}; - 28: {op, input_ctrl} = {BLEND4, DB}; - 29: {op, input_ctrl} = {BLEND5, DB}; - 30: {op, input_ctrl} = {BLEND3, BD}; - 31: {op, input_ctrl} = {BLEND3, DB}; - default: {op, input_ctrl} = {11{1'bx}}; - endcase - - // Setting op[8] effectively disables HQ2X because blend will always return E. - if (disable_hq2x) op[8] = 1; + reg [23:0] a,b,d,e,h,f; + reg [3:0] bl_rule; + reg [1:0] df_rule; + always @(posedge clk) if (clk_en) begin + {bl_rule,df_rule} <= rule; + a <= A; b <= B; d <= D; e <= E; f <= F; h <= H; end - // Generate inputs to the inner blender. Valid combinations. - // 00: E A B - // 01: E A D - // 10: E D B - // 11: E B D - wire [23:0] Input1 = E; - wire [23:0] Input2 = !input_ctrl[1] ? A : - !input_ctrl[0] ? D : B; + wire is_diff; + DiffCheck diff_checker(df_rule[1] ? b : h, df_rule[0] ? d : f, is_diff); + + reg [23:0] i10,i20,i30; + reg [6:0] op0; + always @(posedge clk) if (clk_en) begin + i10 <= e; + case({!is_diff, bl_rule}) + 1,11,12,13,17: {op0, i20, i30} <= {BLEND1, a, 24'd0}; + 2,14,18: {op0, i20, i30} <= {BLEND1, d, 24'd0}; + 3,15,19: {op0, i20, i30} <= {BLEND1, b, 24'd0}; + 4,20,24,27: {op0, i20, i30} <= {BLEND2, d, b}; + 5,21: {op0, i20, i30} <= {BLEND2, a, b}; + 6,22: {op0, i20, i30} <= {BLEND2, a, d}; + 25,29: {op0, i20, i30} <= {BLEND5, d, b}; + 26: {op0, i20, i30} <= {BLEND6, d, b}; + 28: {op0, i20, i30} <= {BLEND4, d, b}; + 30: {op0, i20, i30} <= {BLEND3, b, d}; + 31: {op0, i20, i30} <= {BLEND3, d, b}; + default: {op0, i20, i30} <= {BLEND1, e, 24'd0}; + endcase + end + + reg [23:0] i1,i2,i3; + reg [6:0] op; + always @(posedge clk) if (clk_en) begin + op <= op0; i1 <= i10; i2 <= i20; i3 <= i30; + end + + function [34:0] mul24x3; + input [23:0] op1; + input [2:0] op2; + begin + mul24x3 = 0; + if(op2[0]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0]}; + if(op2[1]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0], 1'b0}; + if(op2[2]) mul24x3 = mul24x3 + {op1[23:16], 4'b0000, op1[15:8], 4'b0000, op1[7:0], 2'b00}; + end + endfunction + + wire [35:0] res = {mul24x3(i1, op[6:4]), 1'b0} + mul24x3(i2, {op[3:2], !op[3:2]}) + mul24x3(i3, {op[1:0], !op[3:2]}); + + always @(posedge clk) if (clk_en) Result <= {res[35:28],res[23:16],res[11:4]}; - wire [23:0] Input3 = !input_ctrl[0] ? B : D; - InnerBlend inner_blend1(op, Input1[7:0], Input2[7:0], Input3[7:0], Result[7:0]); - InnerBlend inner_blend2(op, Input1[15:8], Input2[15:8], Input3[15:8], Result[15:8]); - InnerBlend inner_blend3(op, Input1[23:16], Input2[23:16], Input3[23:16], Result[23:16]); endmodule diff --git a/sys/i2c.v b/sys/i2c.v index 1b89b4f..35c8cbd 100644 --- a/sys/i2c.v +++ b/sys/i2c.v @@ -4,7 +4,12 @@ module i2c input CLK, input START, - input [23:0] I2C_DATA, + input READ, + input [6:0] I2C_ADDR, + input I2C_WLEN, // 0 - one byte, 1 - two bytes + input [7:0] I2C_WDATA1, + input [7:0] I2C_WDATA2, + output [7:0] I2C_RDATA, output reg END = 1, output reg ACK = 0, @@ -18,51 +23,80 @@ module i2c parameter CLK_Freq = 50_000_000; // 50 MHz parameter I2C_Freq = 400_000; // 400 KHz -reg I2C_CLOCK; -always@(negedge CLK) begin - integer mI2C_CLK_DIV = 0; - if(mI2C_CLK_DIV < (CLK_Freq/I2C_Freq)) begin - mI2C_CLK_DIV <= mI2C_CLK_DIV + 1; - end else begin - mI2C_CLK_DIV <= 0; - I2C_CLOCK <= ~I2C_CLOCK; +localparam I2C_FreqX2 = I2C_Freq*2; + +reg I2C_CLOCK; +reg [31:0] cnt; +wire [31:0] cnt_next = cnt + I2C_FreqX2; + +always @(posedge CLK) begin + cnt <= cnt_next; + if(cnt_next >= CLK_Freq) begin + cnt <= cnt_next - CLK_Freq; + I2C_CLOCK <= ~I2C_CLOCK; end end -assign I2C_SCL = SCLK | I2C_CLOCK; -assign I2C_SDA = SDO ? 1'bz : 1'b0; +assign I2C_SCL = (SCLK | I2C_CLOCK) ? 1'bZ : 1'b0; +assign I2C_SDA = SDO[3] ? 1'bz : 1'b0; -reg SCLK = 1, SDO = 1; +reg SCLK; +reg [3:0] SDO; +reg [0:7] rdata; + +reg [5:0] SD_COUNTER; +reg [0:31] SD; + +initial begin + SD_COUNTER = 'b111111; + SD = 'hFFFF; + SCLK = 1; + SDO = 4'b1111; +end + +assign I2C_RDATA = rdata; always @(posedge CLK) begin reg old_clk; reg old_st; - - reg [5:0] SD_COUNTER = 'b111111; - reg [0:31] SD; + reg rd,len; old_clk <= I2C_CLOCK; old_st <= START; + + // delay to make sure SDA changed while SCL is stabilized at low + if(old_clk && ~I2C_CLOCK && ~SD_COUNTER[5]) SDO[0] <= SD[SD_COUNTER[4:0]]; + SDO[3:1] <= SDO[2:0]; if(~old_st && START) begin SCLK <= 1; - SDO <= 1; + SDO <= 4'b1111; ACK <= 0; END <= 0; - SD <= {2'b10, I2C_DATA[23:16], 1'b1, I2C_DATA[15:8], 1'b1, I2C_DATA[7:0], 4'b1011}; + rd <= READ; + len <= I2C_WLEN; + if(READ) SD <= {2'b10, I2C_ADDR, 1'b1, 1'b1, 8'b11111111, 1'b0, 3'b011, 9'b111111111}; + else SD <= {2'b10, I2C_ADDR, 1'b0, 1'b1, I2C_WDATA1, 1'b1, I2C_WDATA2, 4'b1011}; SD_COUNTER <= 0; end else begin if(~old_clk && I2C_CLOCK && ~&SD_COUNTER) begin SD_COUNTER <= SD_COUNTER + 6'd1; case(SD_COUNTER) - 01: SCLK <= 0; - 10,19,28: ACK <= ACK | I2C_SDA; - 29: SCLK <= 1; - 32: END <= 1; + 01: SCLK <= 0; + 10: ACK <= ACK | I2C_SDA; + 19: if(~rd) begin + ACK <= ACK | I2C_SDA; + if(~len) SD_COUNTER <= 29; + end + 20: if(rd) SCLK <= 1; + 23: if(rd) END <= 1; + 28: if(~rd) ACK <= ACK | I2C_SDA; + 29: if(~rd) SCLK <= 1; + 32: if(~rd) END <= 1; endcase - end - if(old_clk && ~I2C_CLOCK && ~SD_COUNTER[5]) SDO <= SD[SD_COUNTER[4:0]]; + if(SD_COUNTER >= 11 && SD_COUNTER <= 18) rdata[SD_COUNTER[4:0]-11] <= I2C_SDA; + end end end diff --git a/sys/i2s.v b/sys/i2s.v index d0480ce..7d4517b 100644 --- a/sys/i2s.v +++ b/sys/i2s.v @@ -1,14 +1,12 @@ module i2s #( - parameter CLK_RATE = 50000000, - parameter AUDIO_DW = 16, - parameter AUDIO_RATE = 96000 + parameter AUDIO_DW = 16 ) ( input reset, - input clk_sys, - input half_rate, + input clk, + input ce, output reg sclk, output reg lrclk, @@ -18,119 +16,39 @@ module i2s input [AUDIO_DW-1:0] right_chan ); -localparam WHOLE_CYCLES = (CLK_RATE) / (AUDIO_RATE*AUDIO_DW*4); -localparam ERROR_BASE = 10000; -localparam [63:0] ERRORS_PER_BIT = ((CLK_RATE * ERROR_BASE) / (AUDIO_RATE*AUDIO_DW*4)) - (WHOLE_CYCLES * ERROR_BASE); - -reg lpf_ce; -wire [AUDIO_DW-1:0] al, ar; - -lpf_i2s lpf_l -( - .CLK(clk_sys), - .CE(lpf_ce), - .IDATA(left_chan), - .ODATA(al) -); - -lpf_i2s lpf_r -( - .CLK(clk_sys), - .CE(lpf_ce), - - .IDATA(right_chan), - .ODATA(ar) -); - -always @(posedge clk_sys) begin - reg [31:0] count_q; - reg [31:0] error_q; +always @(posedge clk) begin reg [7:0] bit_cnt; - reg skip = 0; + reg msclk; reg [AUDIO_DW-1:0] left; reg [AUDIO_DW-1:0] right; - reg msclk; - reg ce; - - lpf_ce <= 0; - if (reset) begin - count_q <= 0; - error_q <= 0; - ce <= 0; - bit_cnt <= 1; - lrclk <= 1; - sclk <= 1; - msclk <= 1; + bit_cnt <= 1; + lrclk <= 1; + sclk <= 1; + msclk <= 1; end - else - begin - if(count_q == WHOLE_CYCLES-1) begin - if (error_q < (ERROR_BASE - ERRORS_PER_BIT)) begin - error_q <= error_q + ERRORS_PER_BIT[31:0]; - count_q <= 0; - end else begin - error_q <= error_q + ERRORS_PER_BIT[31:0] - ERROR_BASE; - count_q <= count_q + 1; - end - end else if(count_q == WHOLE_CYCLES) begin - count_q <= 0; - end else begin - count_q <= count_q + 1; - end - + else begin sclk <= msclk; - if(!count_q) begin - ce <= ~ce; - if(~half_rate || ce) begin - msclk <= ~msclk; - if(msclk) begin - skip <= ~skip; - if(skip) lpf_ce <= 1; - if(bit_cnt >= AUDIO_DW) begin - bit_cnt <= 1; - lrclk <= ~lrclk; - if(lrclk) begin - left <= al; - right <= ar; - end + if(ce) begin + msclk <= ~msclk; + if(msclk) begin + if(bit_cnt >= AUDIO_DW) begin + bit_cnt <= 1; + lrclk <= ~lrclk; + if(lrclk) begin + left <= left_chan; + right <= right_chan; end - else begin - bit_cnt <= bit_cnt + 1'd1; - end - sdata <= lrclk ? right[AUDIO_DW - bit_cnt] : left[AUDIO_DW - bit_cnt]; end + else begin + bit_cnt <= bit_cnt + 1'd1; + end + sdata <= lrclk ? right[AUDIO_DW - bit_cnt] : left[AUDIO_DW - bit_cnt]; end end end end endmodule - -module lpf_i2s -( - input CLK, - input CE, - input [15:0] IDATA, - output reg [15:0] ODATA -); - -reg [511:0] acc; -reg [20:0] sum; - -always @(*) begin - integer i; - sum = 0; - for (i = 0; i < 32; i = i+1) sum = sum + {{5{acc[(i*16)+15]}}, acc[i*16 +:16]}; -end - -always @(posedge CLK) begin - if(CE) begin - acc <= {acc[495:0], IDATA}; - ODATA <= sum[20:5]; - end -end - -endmodule diff --git a/sys/iir_filter.v b/sys/iir_filter.v new file mode 100644 index 0000000..a5336e9 --- /dev/null +++ b/sys/iir_filter.v @@ -0,0 +1,213 @@ + +// 3-tap IIR filter for 2 channels. +// Copyright (C) 2020 Sorgelig +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +// +// Can be converted to 2-tap (coeff_x2 = 0, coeff_y2 = 0) or 1-tap (coeff_x1,2 = 0, coeff_y1,2 = 0) +// +module IIR_filter +#( + parameter use_params = 1, // set to 1 to use following parameters, 0 for input port variables. + parameter stereo = 1, // 0 for mono (input_l) + + parameter coeff_x = 0.00000774701983513660, // Base gain value for X. Float. Range: 0.0 ... 0.999(9) + parameter coeff_x0 = 3, // Gain scale factor for X0. Integer. Range -7 ... +7 + parameter coeff_x1 = 3, // Gain scale factor for X1. Integer. Range -7 ... +7 + parameter coeff_x2 = 1, // Gain scale factor for X2. Integer. Range -7 ... +7 + parameter coeff_y0 = -2.96438150626551080000, // Coefficient for Y0. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y1 = 2.92939452735121100000, // Coefficient for Y1. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y2 = -0.96500747158831091000 // Coefficient for Y2. Float. Range -3.999(9) ... 3.999(9) +) +( + input clk, + input reset, + + input ce, // must be double of calculated rate for stereo! + input sample_ce, // desired output sample rate + + input [39:0] cx, + input [7:0] cx0, + input [7:0] cx1, + input [7:0] cx2, + input [23:0] cy0, + input [23:0] cy1, + input [23:0] cy2, + + input [15:0] input_l, input_r, // signed samples + output [15:0] output_l, output_r // signed samples +); + +localparam [39:0] pcoeff_x = coeff_x * 40'h8000000000; +localparam [31:0] pcoeff_y0 = coeff_y0 * 24'h200000; +localparam [31:0] pcoeff_y1 = coeff_y1 * 24'h200000; +localparam [31:0] pcoeff_y2 = coeff_y2 * 24'h200000; + +wire [39:0] vcoeff = use_params ? pcoeff_x : cx; +wire [23:0] vcoeff_y0 = use_params ? pcoeff_y0[23:0] : cy0; +wire [23:0] vcoeff_y1 = use_params ? pcoeff_y1[23:0] : cy1; +wire [23:0] vcoeff_y2 = use_params ? pcoeff_y2[23:0] : cy2; + +wire [59:0] inp_mul = $signed(inp) * $signed(vcoeff); + +wire [39:0] x = inp_mul[59:20]; +wire [39:0] y = x + tap0; + +wire [39:0] tap0; +iir_filter_tap iir_tap_0 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x0[7:0] : cx0), + .cy(vcoeff_y0), + .x(x), + .y(y), + .z(tap1), + .tap(tap0) +); + +wire [39:0] tap1; +iir_filter_tap iir_tap_1 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x1[7:0] : cx1), + .cy(vcoeff_y1), + .x(x), + .y(y), + .z(tap2), + .tap(tap1) +); + +wire [39:0] tap2; +iir_filter_tap iir_tap_2 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x2[7:0] : cx2), + .cy(vcoeff_y2), + .x(x), + .y(y), + .z(0), + .tap(tap2) +); + +wire [15:0] y_clamp = (~y[39] & |y[38:35]) ? 16'h7FFF : (y[39] & ~&y[38:35]) ? 16'h8000 : y[35:20]; + +reg ch = 0; +reg [15:0] out_l, out_r, out_m; +reg [15:0] inp, inp_m; +always @(posedge clk) if (ce) begin + if(!stereo) begin + ch <= 0; + inp <= input_l; + out_l <= y_clamp; + out_r <= y_clamp; + end + else begin + ch <= ~ch; + if(ch) begin + out_m <= y_clamp; + inp <= inp_m; + end + else begin + out_l <= out_m; + out_r <= y_clamp; + inp <= input_l; + inp_m <= input_r; + end + end +end + +reg [31:0] out; +always @(posedge clk) if (sample_ce) out <= {out_l, out_r}; + +assign {output_l, output_r} = out; + +endmodule + +module iir_filter_tap +( + input clk, + input reset, + + input ce, + input ch, + + input [7:0] cx, + input [23:0] cy, + + input [39:0] x, + input [39:0] y, + input [39:0] z, + output [39:0] tap +); + +wire signed [60:0] y_mul = $signed(y[36:0]) * $signed(cy); + +function [39:0] x_mul; + input [39:0] x; +begin + x_mul = 0; + if(cx[0]) x_mul = x_mul + {{4{x[39]}}, x[39:4]}; + if(cx[1]) x_mul = x_mul + {{3{x[39]}}, x[39:3]}; + if(cx[2]) x_mul = x_mul + {{2{x[39]}}, x[39:2]}; + if(cx[7]) x_mul = ~x_mul; //cheap NEG +end +endfunction + +(* ramstyle = "logic" *) reg [39:0] intreg[2]; +always @(posedge clk, posedge reset) begin + if(reset) {intreg[0],intreg[1]} <= 80'd0; + else if(ce) intreg[ch] <= x_mul(x) - y_mul[60:21] + z; +end + +assign tap = intreg[ch]; + +endmodule + +// simplified IIR 1-tap. +module DC_blocker +( + input clk, + input ce, // 48/96 KHz + input mute, + + input sample_rate, + input [15:0] din, + output [15:0] dout +); + +wire [39:0] x = {din[15], din, 23'd0}; +wire [39:0] x0 = x - (sample_rate ? {{11{x[39]}}, x[39:11]} : {{10{x[39]}}, x[39:10]}); +wire [39:0] y1 = y - (sample_rate ? {{10{y[39]}}, y[39:10]} : {{09{y[39]}}, y[39:09]}); +wire [39:0] y0 = x0 - x1 + y1; + +reg [39:0] x1, y; +always @(posedge clk) if(ce) begin + x1 <= x0; + y <= ^y0[39:38] ? {{2{y0[39]}},{38{y0[38]}}} : y0; +end + +assign dout = mute ? 16'd0 : y[38:23]; + +endmodule diff --git a/sys/ip/avalon_combiner.v b/sys/ip/avalon_combiner.v deleted file mode 100644 index 3a26c6a..0000000 --- a/sys/ip/avalon_combiner.v +++ /dev/null @@ -1,60 +0,0 @@ -// avalon_combiner.v - -`timescale 1 ps / 1 ps -module avalon_combiner -( - input wire clk, // clock.clk - input wire rst, // reset.reset - - output wire [6:0] mixer_address, // ctl_mixer.address - output wire [3:0] mixer_byteenable, // .byteenable - output wire mixer_write, // .write - output wire [31:0] mixer_writedata, // .writedata - input wire mixer_waitrequest, // .waitrequest - - output wire [6:0] scaler_address, // ctl_scaler.address - output wire [3:0] scaler_byteenable, // .byteenable - input wire scaler_waitrequest, // .waitrequest - output wire scaler_write, // .write - output wire [31:0] scaler_writedata, // .writedata - - output wire [7:0] video_address, // ctl_video.address - output wire [3:0] video_byteenable, // .byteenable - input wire video_waitrequest, // .waitrequest - output wire video_write, // .write - output wire [31:0] video_writedata, // .writedata - - output wire clock, // control.clock - output wire reset, // .reset - input wire [8:0] address, // .address - input wire write, // .write - input wire [31:0] writedata, // .writedata - output wire waitrequest // .waitrequest -); - -assign clock = clk; -assign reset = rst; - -assign mixer_address = address[6:0]; -assign scaler_address = address[6:0]; -assign video_address = address[7:0]; - -assign mixer_byteenable = 4'b1111; -assign scaler_byteenable = 4'b1111; -assign video_byteenable = 4'b1111; - -wire en_scaler = (address[8:7] == 0); -wire en_mixer = (address[8:7] == 1); -wire en_video = address[8]; - -assign mixer_write = en_mixer & write; -assign scaler_write = en_scaler & write; -assign video_write = en_video & write; - -assign mixer_writedata = writedata; -assign scaler_writedata = writedata; -assign video_writedata = writedata; - -assign waitrequest = (en_mixer & mixer_waitrequest) | (en_scaler & scaler_waitrequest) | (en_video & video_waitrequest); - -endmodule diff --git a/sys/ip/avalon_combiner_hw.tcl b/sys/ip/avalon_combiner_hw.tcl deleted file mode 100644 index 5eede9c..0000000 --- a/sys/ip/avalon_combiner_hw.tcl +++ /dev/null @@ -1,204 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Wed Dec 13 01:40:49 CST 2017 -# DO NOT MODIFY - - -# -# avalon_combiner "avalon_combiner" v17.0 -# sorgelig 2017.12.13.01:40:49 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module avalon_combiner -# -set_module_property DESCRIPTION "" -set_module_property NAME avalon_combiner -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR sorgelig -set_module_property DISPLAY_NAME avalon_combiner -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL avalon_combiner -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file avalon_combiner.v VERILOG PATH avalon_combiner.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point clock -# -add_interface clock clock end -set_interface_property clock clockRate 0 -set_interface_property clock ENABLED true -set_interface_property clock EXPORT_OF "" -set_interface_property clock PORT_NAME_MAP "" -set_interface_property clock CMSIS_SVD_VARIABLES "" -set_interface_property clock SVD_ADDRESS_GROUP "" - -add_interface_port clock clk clk Input 1 - - -# -# connection point reset -# -add_interface reset reset end -set_interface_property reset associatedClock clock -set_interface_property reset synchronousEdges DEASSERT -set_interface_property reset ENABLED true -set_interface_property reset EXPORT_OF "" -set_interface_property reset PORT_NAME_MAP "" -set_interface_property reset CMSIS_SVD_VARIABLES "" -set_interface_property reset SVD_ADDRESS_GROUP "" - -add_interface_port reset rst reset Input 1 - - -# -# connection point ctl_mixer -# -add_interface ctl_mixer avalon start -set_interface_property ctl_mixer addressUnits WORDS -set_interface_property ctl_mixer associatedClock clock -set_interface_property ctl_mixer associatedReset reset -set_interface_property ctl_mixer bitsPerSymbol 8 -set_interface_property ctl_mixer burstOnBurstBoundariesOnly false -set_interface_property ctl_mixer burstcountUnits WORDS -set_interface_property ctl_mixer doStreamReads false -set_interface_property ctl_mixer doStreamWrites false -set_interface_property ctl_mixer holdTime 0 -set_interface_property ctl_mixer linewrapBursts false -set_interface_property ctl_mixer maximumPendingReadTransactions 0 -set_interface_property ctl_mixer maximumPendingWriteTransactions 0 -set_interface_property ctl_mixer readLatency 0 -set_interface_property ctl_mixer readWaitTime 1 -set_interface_property ctl_mixer setupTime 0 -set_interface_property ctl_mixer timingUnits Cycles -set_interface_property ctl_mixer writeWaitTime 0 -set_interface_property ctl_mixer ENABLED true -set_interface_property ctl_mixer EXPORT_OF "" -set_interface_property ctl_mixer PORT_NAME_MAP "" -set_interface_property ctl_mixer CMSIS_SVD_VARIABLES "" -set_interface_property ctl_mixer SVD_ADDRESS_GROUP "" - -add_interface_port ctl_mixer mixer_address address Output 7 -add_interface_port ctl_mixer mixer_byteenable byteenable Output 4 -add_interface_port ctl_mixer mixer_write write Output 1 -add_interface_port ctl_mixer mixer_writedata writedata Output 32 -add_interface_port ctl_mixer mixer_waitrequest waitrequest Input 1 - - -# -# connection point ctl_scaler -# -add_interface ctl_scaler avalon start -set_interface_property ctl_scaler addressUnits WORDS -set_interface_property ctl_scaler associatedClock clock -set_interface_property ctl_scaler associatedReset reset -set_interface_property ctl_scaler bitsPerSymbol 8 -set_interface_property ctl_scaler burstOnBurstBoundariesOnly false -set_interface_property ctl_scaler burstcountUnits WORDS -set_interface_property ctl_scaler doStreamReads false -set_interface_property ctl_scaler doStreamWrites false -set_interface_property ctl_scaler holdTime 0 -set_interface_property ctl_scaler linewrapBursts false -set_interface_property ctl_scaler maximumPendingReadTransactions 0 -set_interface_property ctl_scaler maximumPendingWriteTransactions 0 -set_interface_property ctl_scaler readLatency 0 -set_interface_property ctl_scaler readWaitTime 1 -set_interface_property ctl_scaler setupTime 0 -set_interface_property ctl_scaler timingUnits Cycles -set_interface_property ctl_scaler writeWaitTime 0 -set_interface_property ctl_scaler ENABLED true -set_interface_property ctl_scaler EXPORT_OF "" -set_interface_property ctl_scaler PORT_NAME_MAP "" -set_interface_property ctl_scaler CMSIS_SVD_VARIABLES "" -set_interface_property ctl_scaler SVD_ADDRESS_GROUP "" - -add_interface_port ctl_scaler scaler_address address Output 7 -add_interface_port ctl_scaler scaler_byteenable byteenable Output 4 -add_interface_port ctl_scaler scaler_waitrequest waitrequest Input 1 -add_interface_port ctl_scaler scaler_write write Output 1 -add_interface_port ctl_scaler scaler_writedata writedata Output 32 - - -# -# connection point ctl_video -# -add_interface ctl_video avalon start -set_interface_property ctl_video addressUnits WORDS -set_interface_property ctl_video associatedClock clock -set_interface_property ctl_video associatedReset reset -set_interface_property ctl_video bitsPerSymbol 8 -set_interface_property ctl_video burstOnBurstBoundariesOnly false -set_interface_property ctl_video burstcountUnits WORDS -set_interface_property ctl_video doStreamReads false -set_interface_property ctl_video doStreamWrites false -set_interface_property ctl_video holdTime 0 -set_interface_property ctl_video linewrapBursts false -set_interface_property ctl_video maximumPendingReadTransactions 0 -set_interface_property ctl_video maximumPendingWriteTransactions 0 -set_interface_property ctl_video readLatency 0 -set_interface_property ctl_video readWaitTime 1 -set_interface_property ctl_video setupTime 0 -set_interface_property ctl_video timingUnits Cycles -set_interface_property ctl_video writeWaitTime 0 -set_interface_property ctl_video ENABLED true -set_interface_property ctl_video EXPORT_OF "" -set_interface_property ctl_video PORT_NAME_MAP "" -set_interface_property ctl_video CMSIS_SVD_VARIABLES "" -set_interface_property ctl_video SVD_ADDRESS_GROUP "" - -add_interface_port ctl_video video_address address Output 8 -add_interface_port ctl_video video_byteenable byteenable Output 4 -add_interface_port ctl_video video_waitrequest waitrequest Input 1 -add_interface_port ctl_video video_write write Output 1 -add_interface_port ctl_video video_writedata writedata Output 32 - - -# -# connection point control -# -add_interface control conduit end -set_interface_property control associatedClock clock -set_interface_property control associatedReset reset -set_interface_property control ENABLED true -set_interface_property control EXPORT_OF "" -set_interface_property control PORT_NAME_MAP "" -set_interface_property control CMSIS_SVD_VARIABLES "" -set_interface_property control SVD_ADDRESS_GROUP "" - -add_interface_port control address address Input 9 -add_interface_port control write write Input 1 -add_interface_port control writedata writedata Input 32 -add_interface_port control waitrequest waitrequest Output 1 -add_interface_port control clock clock Output 1 -add_interface_port control reset reset Output 1 - diff --git a/sys/ip/de10_hps_hw.tcl b/sys/ip/de10_hps_hw.tcl deleted file mode 100644 index a166ca0..0000000 --- a/sys/ip/de10_hps_hw.tcl +++ /dev/null @@ -1,3706 +0,0 @@ -# (C) 2001-2017 Intel Corporation. All rights reserved. -# Your use of Intel Corporation's design tools, logic functions and other -# software and tools, and its AMPP partner logic functions, and any output -# files any of the foregoing (including device programming or simulation -# files), and any associated documentation or information are expressly subject -# to the terms and conditions of the Intel Program License Subscription -# Agreement, Intel MegaCore Function License Agreement, or other applicable -# license agreement, including, without limitation, that your use is for the -# sole purpose of programming logic devices manufactured by Intel and sold by -# Intel or its authorized distributors. Please refer to the applicable -# agreement for further details. - - -# This IP is modified standard Altera HPS IP. -# Direct DDR3 SDRAM access has been removed since it won't work together with HPS DDR3 SDRAM access. -# FPGA access the memory through MPFE (FPGA2SDRAM bridge). -# By removing direct DDR3 SDRAM access synthesis time has been reduced by 3 times! - - -package require -exact qsys 12.0 -package require -exact altera_terp 1.0 -package require quartus::advanced_wysiwyg - -set_module_property NAME altera_hps_lite -set_module_property VERSION 17.0 -set_module_property AUTHOR "Altera Corporation/Sorgelig" -set_module_property SUPPORTED_DEVICE_FAMILIES {CYCLONEV ARRIAV} - -set_module_property DISPLAY_NAME "DE10-nano Hard Processor System" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE false -set_module_property HIDE_FROM_SOPC true -set_module_property HIDE_FROM_QUARTUS true - -add_documentation_link "HPS User Guide for Cyclone V" "http://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf" -add_documentation_link "HPS User Guide for Arria V" "http://www.altera.com/literature/hb/arria-v/av_5v4.pdf" - -set alt_mem_if_tcl_libs_dir "$env(QUARTUS_ROOTDIR)/../ip/altera/alt_mem_if/alt_mem_if_tcl_packages" -if {[lsearch -exact $auto_path $alt_mem_if_tcl_libs_dir] == -1} { - lappend auto_path $alt_mem_if_tcl_libs_dir -} - -package require alt_mem_if::gui::system_info - -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/constants.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/procedures.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/pin_mux.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/pin_mux_db.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/locations.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/util/ui.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/clocks.tcl -source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/clock_manager.tcl - -proc add_storage_parameter {name { default_value {} } } { - add_parameter $name string $default_value "" - set_parameter_property $name derived true - set_parameter_property $name visible false -} - -proc add_reset_parameters {} { - set group_name "Resets" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter S2FCLK_COLDRST_Enable boolean false "" - set_parameter_property S2FCLK_COLDRST_Enable display_name "Enable HPS-to-FPGA cold reset output" - set_parameter_property S2FCLK_COLDRST_Enable group $group_name - - add_parameter S2FCLK_PENDINGRST_Enable boolean false "" - set_parameter_property S2FCLK_PENDINGRST_Enable display_name "Enable HPS warm reset handshake signals" - set_parameter_property S2FCLK_PENDINGRST_Enable group $group_name - - add_parameter F2SCLK_DBGRST_Enable boolean false "" - set_parameter_property F2SCLK_DBGRST_Enable display_name "Enable FPGA-to-HPS debug reset request" - set_parameter_property F2SCLK_DBGRST_Enable group $group_name - - add_parameter F2SCLK_WARMRST_Enable boolean false "" - set_parameter_property F2SCLK_WARMRST_Enable display_name "Enable FPGA-to-HPS warm reset request" - set_parameter_property F2SCLK_WARMRST_Enable group $group_name - - add_parameter F2SCLK_COLDRST_Enable boolean false "" - set_parameter_property F2SCLK_COLDRST_Enable display_name "Enable FPGA-to-HPS cold reset request" - set_parameter_property F2SCLK_COLDRST_Enable group $group_name - -} - -proc list_h2f_interrupt_groups {} { - return { - "CAN" "CLOCKPERIPHERAL" "CTI" - "DMA" "EMAC" "FPGAMANAGER" - "GPIO" "I2CEMAC" "I2CPERIPHERAL" - "L4TIMER" "NAND" "OSCTIMER" - "QSPI" "SDMMC" "SPIMASTER" - "SPISLAVE" "UART" "USB" - "WATCHDOG" - } -} - -proc get_h2f_interrupt_descriptions {data_ref} { - upvar 1 $data_ref data - array set data { - "DMA" "Enable DMA interrupts" - "EMAC" "Enable EMAC interrupts (for EMAC0 and EMAC1)" - "USB" "Enable USB interrupts" - "CAN" "Enable CAN interrupts" - "SDMMC" "Enable SD/MMC interrupt" - "NAND" "Enable NAND interrupt" - "QSPI" "Enable Quad SPI interrupt" - "SPIMASTER" "Enable SPI master interrupts" - "SPISLAVE" "Enable SPI slave interrupts" - "I2CPERIPHERAL" "Enable I2C peripheral interrupts (for I2C0 and I2C1)" - "I2CEMAC" "Enable I2C-EMAC interrupts (for I2C2 and I2C3)" - "UART" "Enable UART interrupts" - "GPIO" "Enable GPIO interrupts" - "L4TIMER" "Enable L4 timer interrupts" - "OSCTIMER" "Enable OSC timer interrupts" - "WATCHDOG" "Enable watchdog interrupts" - "CLOCKPERIPHERAL" "Enable clock peripheral interrupts" - "FPGAMANAGER" "Enable FPGA manager interrupt" - "CTI" "Enable CTI interrupts" - } -} - -proc load_h2f_interrupt_table {functions_by_group_ref - width_by_function_ref - inverted_by_function_ref} { - upvar 1 $functions_by_group_ref functions_by_group - upvar 1 $width_by_function_ref width_by_function - upvar 1 $inverted_by_function_ref inverted_by_function - array set functions_by_group { - "DMA" {"dma" "dma_abort" } - "EMAC" {"emac0" "emac1" } - "USB" {"usb0" "usb1" } - "CAN" {"can0" "can1" } - "SDMMC" {"sdmmc" } - "NAND" {"nand" } - "QSPI" {"qspi" } - "SPIMASTER" {"spi0" "spi1" } - "SPISLAVE" {"spi2" "spi3" } - "I2CPERIPHERAL" {"i2c0" "i2c1" } - "I2CEMAC" {"i2c_emac0" "i2c_emac1" } - "UART" {"uart0" "uart1" } - "GPIO" {"gpio0" "gpio1" "gpio2"} - "L4TIMER" {"l4sp0" "l4sp1" } - "OSCTIMER" {"osc0" "osc1" } - "WATCHDOG" {"wdog0" "wdog1" } - "CLOCKPERIPHERAL" {"clkmgr" "mpuwakeup" } - "FPGAMANAGER" {"fpga_man" } - "CTI" {"cti" } - } - array set width_by_function { - "dma" 8 - "cti" 2 - } - array set inverted_by_function { - "cti" 1 - } -} - -proc add_interrupt_parameters {} { - set top_group_name "Interrupts" - add_display_item "FPGA Interfaces" $top_group_name "group" "" - - # add_display_item $group_name "f2h_interrupts_label" "text" "FPGA-to-HPS" - add_parameter F2SINTERRUPT_Enable boolean false - set_parameter_property F2SINTERRUPT_Enable enabled true - set_parameter_property F2SINTERRUPT_Enable display_name "Enable FPGA-to-HPS Interrupts" - set_parameter_property F2SINTERRUPT_Enable group $top_group_name - - set inner_group_name "HPS-to-FPGA" - add_display_item $top_group_name $inner_group_name "group" "" - get_h2f_interrupt_descriptions descriptions_by_group - set interrupt_groups [list_h2f_interrupt_groups] - foreach interrupt_group $interrupt_groups { - set parameter "S2FINTERRUPT_${interrupt_group}_Enable" - add_parameter $parameter boolean false - set_parameter_property $parameter enabled true - set_parameter_property $parameter display_name $descriptions_by_group($interrupt_group) - set_parameter_property $parameter group $inner_group_name - } -} - -proc add_dma_parameters {} { - set group_name "DMA Peripheral Request" - add_display_item "FPGA Interfaces" $group_name "group" "" - add_display_item $group_name "DMA Table" "group" "table" - - add_parameter DMA_PeriphId_DERIVED string_list {0 1 2 3 4 5 6 7} - set_parameter_property DMA_PeriphId_DERIVED display_name "Peripheral Request ID" - set_parameter_property DMA_PeriphId_DERIVED derived true - set_parameter_property DMA_PeriphId_DERIVED display_hint "FIXED_SIZE" - set_parameter_property DMA_PeriphId_DERIVED group "DMA Table" - - add_parameter DMA_Enable string_list {"No" "No" "No" "No" "No" "No" "No" "No"} - set_parameter_property DMA_Enable allowed_ranges {"Yes" "No"} - set_parameter_property DMA_Enable display_name "Enabled" - set_parameter_property DMA_Enable display_hint "FIXED_SIZE" - set_parameter_property DMA_Enable group "DMA Table" -} - -proc range_from_zero {end} { - set result [list] - for {set i 0} {$i <= $end} {incr i} { - lappend result $i - } - return $result -} - -proc create_generic_parameters {} { - - ::alt_mem_if::util::hwtcl_utils::_add_parameter SYS_INFO_DEVICE_FAMILY STRING "" - set_parameter_property SYS_INFO_DEVICE_FAMILY SYSTEM_INFO DEVICE_FAMILY - set_parameter_property SYS_INFO_DEVICE_FAMILY VISIBLE FALSE - - ::alt_mem_if::util::hwtcl_utils::_add_parameter DEVICE_FAMILY STRING "" - set_parameter_property DEVICE_FAMILY DERIVED true - set_parameter_property DEVICE_FAMILY VISIBLE FALSE - - return 1 -} - -create_generic_parameters - -add_display_item "" "FPGA Interfaces" "group" "tab" -add_display_item "" "Peripheral Pins" "group" "tab" -add_display_item "" "HPS Clocks" "group" "tab" -add_clock_tab "HPS Clocks" - -add_display_item "FPGA Interfaces" "General" "group" "" - -add_parameter MPU_EVENTS_Enable boolean true -set_parameter_property MPU_EVENTS_Enable display_name "Enable MPU standby and event signals" -set_parameter_property MPU_EVENTS_Enable description "Enables elaboration of the mpu_events interface." -set_parameter_property MPU_EVENTS_Enable group "General" - -add_parameter GP_Enable boolean false -set_parameter_property GP_Enable display_name "Enable general purpose signals" -set_parameter_property GP_Enable description "Enables elaboration of interface h2f_gp." -set_parameter_property GP_Enable group "General" - -add_parameter DEBUGAPB_Enable boolean false -set_parameter_property DEBUGAPB_Enable display_name "Enable Debug APB interface" -set_parameter_property DEBUGAPB_Enable description "Enables elaboration of Debug APB interfaces." -set_parameter_property DEBUGAPB_Enable group "General" - -add_parameter STM_Enable boolean false -set_parameter_property STM_Enable display_name "Enable System Trace Macrocell hardware events" -set_parameter_property STM_Enable description "Enables elaboration of interface stm_hwevents." -set_parameter_property STM_Enable group "General" - -add_parameter CTI_Enable boolean false -set_parameter_property CTI_Enable display_name "Enable FPGA Cross Trigger Interface" -set_parameter_property CTI_Enable description "Enables elaboration of interface cti_trigger, cti_clk_in." -set_parameter_property CTI_Enable group "General" - -add_parameter TPIUFPGA_Enable boolean false -set_parameter_property TPIUFPGA_Enable display_name "Enable FPGA Trace Port Interface Unit" -set_parameter_property TPIUFPGA_Enable description "Enables elaboration of TPIU FPGA interfaces." -set_parameter_property TPIUFPGA_Enable group "General" - -add_parameter TPIUFPGA_alt boolean false -set_parameter_property TPIUFPGA_alt display_name "Enable FPGA Trace Port Alternate FPGA Interface" -set_parameter_property TPIUFPGA_alt description "When the trace port is enabled, it creates an interface compatible with the Arria 10 Trace Interface. (This just moves the clock_in port into the same conduit)" -set_parameter_property TPIUFPGA_alt group "General" -set_parameter_property TPIUFPGA_alt enabled false - - -add_parameter BOOTFROMFPGA_Enable boolean false -set_parameter_property BOOTFROMFPGA_Enable enabled true -set_parameter_property BOOTFROMFPGA_Enable display_name "Enable boot from fpga signals" -set_parameter_property BOOTFROMFPGA_Enable description "Enables elaboration of interface boot_from_fpga." -set_parameter_property BOOTFROMFPGA_Enable group "General" - -add_parameter TEST_Enable boolean false -set_parameter_property TEST_Enable enabled true -set_parameter_property TEST_Enable display_name "Enable Test Interface" -set_parameter_property TEST_Enable group "General" - -add_parameter HLGPI_Enable boolean false -set_parameter_property HLGPI_Enable enabled true -set_parameter_property HLGPI_Enable display_name "Enable HLGPI Interface" -set_parameter_property HLGPI_Enable group "General" - -add_display_item "FPGA Interfaces" "Boot and Clock Selection" "group" "" -add_parameter BSEL_EN boolean false -set_parameter_property BSEL_EN enabled true -set_parameter_property BSEL_EN display_name "Enable boot selection from FPGA" -set_parameter_property BSEL_EN group "Boot and Clock Selection" -set_parameter_property BSEL_EN visible false -set_parameter_property BSEL_EN enabled false - -add_parameter BSEL integer 1 -set_parameter_property BSEL allowed_ranges {"1:FPGA" "2:NAND Flash (1.8v)" "3:NAND Flash (3.0v)" "4:SD/MMC External Transceiver (1.8v)" "5:SD/MMC Internal Transceiver (3.0v)" "6:Quad SPI Flash (1.8v)" "7:Quad SPI Flash (3.0v)"} -set_parameter_property BSEL display_name "Boot selection from FPGA" -set_parameter_property BSEL group "Boot and Clock Selection" -set_parameter_property BSEL visible false -set_parameter_property BSEL enabled false - -add_parameter CSEL_EN boolean false -set_parameter_property CSEL_EN enabled true -set_parameter_property CSEL_EN display_name "Enable clock selection from FPGA" -set_parameter_property CSEL_EN group "Boot and Clock Selection" -set_parameter_property CSEL_EN visible false -set_parameter_property CSEL_EN enabled false - -add_parameter CSEL integer 0 -set_parameter_property CSEL allowed_ranges {"0:CSEL_0" "1:CSEL_1" "2:CSEL_2" "3:CSEL_3"} -set_parameter_property CSEL display_name "Clock selection from FPGA" -set_parameter_property CSEL group "Boot and Clock Selection" -set_parameter_property CSEL visible false -set_parameter_property CSEL enabled false - -add_display_item "FPGA Interfaces" "AXI Bridges" "group" "" -add_parameter F2S_Width integer 2 -set_parameter_property F2S_Width allowed_ranges {"0:Unused" "1:32-bit" "2:64-bit" "3:128-bit"} -set_parameter_property F2S_Width display_name "FPGA-to-HPS interface width" -set_parameter_property F2S_Width hdl_parameter true -set_parameter_property F2S_Width group "AXI Bridges" - -add_parameter S2F_Width integer 2 -set_parameter_property S2F_Width allowed_ranges {"0:Unused" "1:32-bit" "2:64-bit" "3:128-bit"} -set_parameter_property S2F_Width display_name "HPS-to-FPGA interface width" -set_parameter_property S2F_Width hdl_parameter true -set_parameter_property S2F_Width group "AXI Bridges" - -add_parameter LWH2F_Enable string true -set_parameter_property LWH2F_Enable display_name "Lightweight HPS-to-FPGA interface width" -set_parameter_property LWH2F_Enable description "The lightweight HPS-to-FPGA bridge provides a secondary, fixed-width, smaller address space, lower-performance master interface to the FPGA fabric. Use the lightweight HPS-to-FPGA bridge for high-latency, low-bandwidth traffic, such as memory-mapped register accesses of FPGA peripherals. This approach diverts traffic from the high-performance HPS-to-FPGA bridge, which can improve overall performance." -set_parameter_property LWH2F_Enable allowed_ranges {"true:32-bit" "false:Unused"} -set_parameter_property LWH2F_Enable group "AXI Bridges" - - -set group_name "FPGA-to-HPS SDRAM Interface" -add_display_item "FPGA Interfaces" $group_name "group" "" -add_display_item $group_name "f2sdram_label" "text" "Click the '+' and '-' buttons to add and remove FPGA-to-HPS SDRAM ports." -set table_name "F2SDRAM Settings" -add_display_item $group_name $table_name "group" "table" - -add_parameter F2SDRAM_Name_DERIVED string_list {"f2h_sdram0"} -set_parameter_property F2SDRAM_Name_DERIVED derived true -set_parameter_property F2SDRAM_Name_DERIVED display_name "Name" -set_parameter_property F2SDRAM_Name_DERIVED group $table_name - -add_parameter F2SDRAM_Type string_list [list [F2HSDRAM_AXI3]] -set_parameter_property F2SDRAM_Type allowed_ranges [list [F2HSDRAM_AXI3] [F2HSDRAM_AVM] [F2HSDRAM_AVM_WRITEONLY] [F2HSDRAM_AVM_READONLY]] -set_parameter_property F2SDRAM_Type display_name "Type" -set_parameter_property F2SDRAM_Type group $table_name - -add_parameter F2SDRAM_Width integer_list {"64"} -set_parameter_property F2SDRAM_Width allowed_ranges "32,64,128,256" -set_parameter_property F2SDRAM_Width display_name "Width" -set_parameter_property F2SDRAM_Width group $table_name -set_parameter_update_callback F2SDRAM_Width on_altered_f2sdram_width -# TODO: f2sdram derived parameters for resource counts in the table -# TODO: f2sdram derived parameters for remaining resources, not a part of the table - -add_storage_parameter F2SDRAM_Width_Last_Size 1 -add_storage_parameter F2SDRAM_CMD_PORT_USED 0 -add_storage_parameter F2SDRAM_WR_PORT_USED 0 -add_storage_parameter F2SDRAM_RD_PORT_USED 0 -add_storage_parameter F2SDRAM_RST_PORT_USED 0 -set_parameter_property F2SDRAM_Width_Last_Size group $group_name -set_parameter_property F2SDRAM_CMD_PORT_USED group $group_name -set_parameter_property F2SDRAM_WR_PORT_USED group $group_name -set_parameter_property F2SDRAM_RD_PORT_USED group $group_name -set_parameter_property F2SDRAM_RST_PORT_USED group $group_name - -#Parameter to export Bonding_out signal from fpga2sdram Atom -add_parameter BONDING_OUT_ENABLED boolean false -set_parameter_property BONDING_OUT_ENABLED display_name "Enable BONDING-OUT signals" -set_parameter_property BONDING_OUT_ENABLED group $group_name -set_parameter_property BONDING_OUT_ENABLED enabled false -set_parameter_property BONDING_OUT_ENABLED visible false - - -proc on_altered_f2sdram_width { param } { - set old_size [get_parameter_value F2SDRAM_Width_Last_Size] - set current_value [get_parameter_value F2SDRAM_Width] - set current_size [llength $current_value] - - if {$current_size == $old_size + 1} { ;# look for case of newly added row - set last_element_index [expr {$current_size - 1}] - set new_value [lreplace $current_value $last_element_index $last_element_index "64"] - set_parameter_value F2SDRAM_Width $new_value - } -} - -add_reset_parameters - -add_dma_parameters - -add_interrupt_parameters - - set group_name "EMAC ptp interface" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter EMAC0_PTP boolean false - set_parameter_property EMAC0_PTP display_name "Enable EMAC0 Precision Time Protocol (PTP) FPGA Interface" - set_parameter_property EMAC0_PTP hdl_parameter false - set_parameter_property EMAC0_PTP enabled false - set_parameter_property EMAC0_PTP group $group_name - set_parameter_property EMAC0_PTP description "When the EMAC is connected to the HPS IO via the Pinmux, the IEEE 1588 Precision Time Protocol (PTP) interface can be accessed through the FPGA. When the EMAC connects to the FPGA, the PTP signals are always available." - - add_parameter EMAC1_PTP boolean false - set_parameter_property EMAC1_PTP display_name "Enable EMAC1 Precision Time Protocol (PTP) FPGA Interface" - set_parameter_property EMAC1_PTP hdl_parameter false - set_parameter_property EMAC1_PTP enabled false - set_parameter_property EMAC1_PTP group $group_name - set_parameter_property EMAC1_PTP description "When the EMAC is connected to the HPS IO via the Pinmux, the IEEE 1588 Precision Time Protocol (PTP) interface can be accessed through the FPGA. When the EMAC connects to the FPGA, the PTP signals are always available." - - -proc make_mode_display_name {peripheral} { - set default_suffix "mode" - array set custom_suffix_by_peripheral { - USB0 "PHY interface mode" - USB1 "PHY interface mode" - } - if {[info exists custom_suffix_by_peripheral($peripheral)]} { - set suffix $custom_suffix_by_peripheral($peripheral) - } else { - set suffix $default_suffix - } - - set display_name "${peripheral} ${suffix}" - return $display_name -} - -proc add_peripheral_pin_muxing_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - - - foreach group_name [list_group_names] { - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - foreach peripheral_name [peripherals_in_group $group_name] { - set pin_muxing_param_name "${peripheral_name}_PinMuxing" - set mode_param_name "${peripheral_name}_Mode" - add_parameter $pin_muxing_param_name string [UNUSED_MUX_VALUE] - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $pin_muxing_param_name display_name "${peripheral_name} pin" - set_parameter_property $pin_muxing_param_name allowed_ranges [UNUSED_MUX_VALUE] - set_parameter_property $pin_muxing_param_name group $group_name - set_parameter_update_callback $pin_muxing_param_name on_altered_peripheral_pin_muxing $peripheral_name - - set mode_display_name [make_mode_display_name $peripheral_name] - add_parameter $mode_param_name string [NA_MODE_VALUE] - set_parameter_property $mode_param_name enabled false - set_parameter_property $mode_param_name display_name $mode_display_name - set_parameter_property $mode_param_name allowed_ranges [NA_MODE_VALUE] - set_parameter_property $mode_param_name group $group_name - - if {[string match "*EMAC*" $peripheral_name]} { - set_parameter_update_callback $mode_param_name on_emac_mode_switch_internal $peripheral_name - } - } - } -} -add_peripheral_pin_muxing_parameters - -proc add_gpio_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - set group_name "Peripherals Mux Table" - set table_name "Conflict Table" - - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - #add_display_item $group_name $table_name "group" "table" - - add_parameter Customer_Pin_Name_DERIVED string_list {} - set_parameter_property Customer_Pin_Name_DERIVED display_name "Pin Name" - set_parameter_property Customer_Pin_Name_DERIVED derived true - set_parameter_property Customer_Pin_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property Customer_Pin_Name_DERIVED visible false - # set_parameter_property Customer_Pin_Name_DERIVED group $table_name - - add_parameter GPIO_Conflict_DERIVED string_list {} - set_parameter_property GPIO_Conflict_DERIVED display_name "Used by" - set_parameter_property GPIO_Conflict_DERIVED derived true - set_parameter_property GPIO_Conflict_DERIVED display_hint "FIXED_SIZE" - set_parameter_property GPIO_Conflict_DERIVED visible false - #set_parameter_property GPIO_Conflict_DERIVED group $table_name - - add_parameter GPIO_Name_DERIVED string_list {} - set_parameter_property GPIO_Name_DERIVED display_name "GPIO" - set_parameter_property GPIO_Name_DERIVED derived true - set_parameter_property GPIO_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property GPIO_Name_DERIVED visible false - #set_parameter_property GPIO_Name_DERIVED group $table_name - - # TODO: change? - set max_possible_gpio_options 100 - set enable_list [list] - for {set i 0} {$i < $max_possible_gpio_options} {incr i} { - lappend enable_list "No" - } - - add_parameter GPIO_Enable string_list $enable_list - set_parameter_property GPIO_Enable allowed_ranges {"Yes" "No"} - set_parameter_property GPIO_Enable display_name "GPIO Enabled" - set_parameter_property GPIO_Enable visible false - # set_parameter_property GPIO_Enable group $table_name - - add_parameter LOANIO_Name_DERIVED string_list {} - set_parameter_property LOANIO_Name_DERIVED display_name "Loan I/O" - set_parameter_property LOANIO_Name_DERIVED derived true - set_parameter_property LOANIO_Name_DERIVED display_hint "FIXED_SIZE" - set_parameter_property LOANIO_Name_DERIVED visible false - - add_parameter GPIO_Pin_Used_DERIVED boolean false - set_parameter_property GPIO_Pin_Used_DERIVED display_name "GPIO Pin Used" - set_parameter_property GPIO_Pin_Used_DERIVED derived true - set_parameter_property GPIO_Pin_Used_DERIVED display_hint "GPIO Pin Used" - set_parameter_property GPIO_Pin_Used_DERIVED visible false - - add_parameter LOANIO_Enable string_list $enable_list - set_parameter_property LOANIO_Enable allowed_ranges {"Yes" "No"} - set_parameter_property LOANIO_Enable display_name "Loan I/O Enabled" - set_parameter_property LOANIO_Enable visible false - #set_parameter_property LOANIO_Enable group $table_name - - - -} -add_gpio_parameters - -proc add_reset_parameters {} { - set group_name "Resets" - add_display_item "FPGA Interfaces" $group_name "group" "" - - add_parameter S2FCLK_COLDRST_Enable boolean false "" - set_parameter_property S2FCLK_COLDRST_Enable display_name "Enable HPS-to-FPGA cold reset output" - set_parameter_property S2FCLK_COLDRST_Enable group $group_name - - add_parameter S2FCLK_PENDINGRST_Enable boolean false "" - set_parameter_property S2FCLK_PENDINGRST_Enable display_name "Enable HPS warm reset handshake signals" - set_parameter_property S2FCLK_PENDINGRST_Enable group $group_name - - add_parameter F2SCLK_DBGRST_Enable boolean false "" - set_parameter_property F2SCLK_DBGRST_Enable display_name "Enable FPGA-to-HPS debug reset request" - set_parameter_property F2SCLK_DBGRST_Enable group $group_name - - add_parameter F2SCLK_WARMRST_Enable boolean false "" - set_parameter_property F2SCLK_WARMRST_Enable display_name "Enable FPGA-to-HPS warm reset request" - set_parameter_property F2SCLK_WARMRST_Enable group $group_name - - add_parameter F2SCLK_COLDRST_Enable boolean false "" - set_parameter_property F2SCLK_COLDRST_Enable display_name "Enable FPGA-to-HPS cold reset request" - set_parameter_property F2SCLK_COLDRST_Enable group $group_name - -} - -proc add_java_gui_parameters {} { - set TOP_LEVEL_GROUP_NAME "Peripheral Pins" - set group_name "Peripherals Mux Table" - - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - # add_display_item $group_name the_widget "group" "" - - add_parameter JAVA_CONFLICT_PIN string_list {} - set_parameter_property JAVA_CONFLICT_PIN derived true - set_parameter_property JAVA_CONFLICT_PIN visible false - - - add_parameter JAVA_GUI_PIN_LIST string_list {} - set_parameter_property JAVA_GUI_PIN_LIST derived true - set_parameter_property JAVA_GUI_PIN_LIST visible false - - set peripherals [list_peripheral_names] - set widget_parameter [list \ - Customer_Pin_Name_DERIVED Customer_Pin_Name_DERIVED \ - GPIO_Name_DERIVED GPIO_Name_DERIVED \ - LOANIO_Name_DERIVED LOANIO_Name_DERIVED \ - LOANIO_Enable LOANIO_Enable \ - GPIO_Enable GPIO_Enable \ - JAVA_CONFLICT_PIN GUI_Conflict_Pins_List \ - JAVA_GUI_PIN_LIST GUI_GPIO_Pins_List] - - foreach peripheral_name $peripherals { - add_parameter "JAVA_${peripheral_name}_DATA" string "" - set_parameter_property "JAVA_${peripheral_name}_DATA" derived true - set_parameter_property "JAVA_${peripheral_name}_DATA" visible false - - lappend widget_parameter "JAVA_${peripheral_name}_DATA" - lappend widget_parameter "${peripheral_name}_pin_muxing" - lappend widget_parameter "${peripheral_name}_PinMuxing" - lappend widget_parameter "${peripheral_name}_PinMuxing" - lappend widget_parameter "${peripheral_name}_Mode" - lappend widget_parameter "${peripheral_name}_Mode" - } - - add_display_item $group_name the_widget "group" - set_display_item_property the_widget widget [list ../widget/pin_mux_widget.jar Altera_hps_widget] - set_display_item_property the_widget widget_parameter_map $widget_parameter -} - -add_java_gui_parameters - -############################################## -# Clocks! -# -# All clock enable parameters go here. -# Clock frequency parameters also go here. All -# the parameters need to be declared regardless -# of whether the clock will be exercised. -# -# Validation logic will enable/show frequency -# parameters based on whether the actual clock -# is being elaborated. -# -# There are four categories of clocks in this -# component: inputs on SoC I/O -# outputs on SoC I/O -# inputs on FPGA pins -# outputs on FPGA pins -# -# Inputs on SoC I/O have user-input parameters -# so the data can be consumed by downstream -# embedded software tools. -# Outputs on SoC I/O need not have frequency -# information recorded. -# Inputs on FPGA pins have system info parameters -# so the data can be consumed by downstream -# embedded software tools. -# Outputs on FPGA pins have user input parameters -# to be consumed by Quartus via SDC. -# -############################################## -proc add_clock_parameters {} { - set TOP_LEVEL_GROUP_NAME "Input Clocks" - - set group_name "User Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - # fake group - set group_name "FPGA Interface Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - foreach interface { - f2h_axi_clock h2f_axi_clock h2f_lw_axi_clock - f2h_sdram0_clock f2h_sdram1_clock f2h_sdram2_clock - f2h_sdram3_clock f2h_sdram4_clock f2h_sdram5_clock - h2f_cti_clock h2f_tpiu_clock_in h2f_debug_apb_clock - } { - set parameter "[string toupper ${interface}]_FREQ" - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "${interface} clock frequency" - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg $interface - set_parameter_property $parameter visible false - set_parameter_property $parameter group $group_name - } - - set peripherals [list_peripheral_names] - - # TODO: Remove the following for 12.0 - set group_name "Peripheral FPGA Clocks" - add_display_item $TOP_LEVEL_GROUP_NAME $group_name "group" "" - - # Add parameter explicitly for cross-emac ptp since it doesn't belong to a single peripheral - set parameter [form_peripheral_fpga_input_clock_frequency_parameter emac_ptp_ref_clock] - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "EMAC emac_ptp_ref_clock clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg emac_ptp_ref_clock - set_parameter_property $parameter visible false - - foreach peripheral $peripherals { - set clocks [get_peripheral_fpga_input_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_input_clock_frequency_parameter $clock] - add_parameter $parameter integer 100 "" - set_parameter_property $parameter display_name "${peripheral} ${clock} clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter system_info_type "CLOCK_RATE" - set_parameter_property $parameter system_info_arg $clock - set_parameter_property $parameter visible false - } - - set clocks [get_peripheral_fpga_output_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $clock] - if { [string match "*emac?_md*" $clock]} { - add_parameter $parameter float 2.5 "" - } elseif { [string match "*emac?_gtx_clk*" $clock] } { - add_parameter $parameter integer 125 "" - } else { - add_parameter $parameter integer 100 "" - if { [string compare $peripheral "SDIO" ] == 0 } { - set_parameter_property $parameter visible false - } - } - set_parameter_property $parameter display_name "${peripheral} ${clock} clock frequency" - set_parameter_property $parameter group $group_name - set_parameter_property $parameter units Megahertz - set_parameter_property $parameter allowedRanges {1:1000} - } - - } -} -add_clock_parameters - -add_parameter hps_device_family string "" "" -set_parameter_property hps_device_family derived true -set_parameter_property hps_device_family visible false - -add_parameter device_name string "" "" -set_parameter_property device_name system_info {DEVICE} -set_parameter_property device_name visible false - -add_parameter quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces system_info_arg hps_ip_enable_all_peripheral_fpga_interfaces -set_parameter_property quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces visible false - -add_parameter quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface system_info_arg hps_ip_enable_emac0_peripheral_fpga_interface -set_parameter_property quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface visible false - -add_parameter quartus_ini_hps_ip_enable_test_interface boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_test_interface system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_test_interface system_info_arg hps_ip_enable_test_interface -set_parameter_property quartus_ini_hps_ip_enable_test_interface visible false - -add_parameter quartus_ini_hps_ip_fast_f2sdram_sim_model boolean "" "" -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model system_info_arg hps_ip_fast_f2sdram_sim_model -set_parameter_property quartus_ini_hps_ip_fast_f2sdram_sim_model visible false - -add_parameter quartus_ini_hps_ip_suppress_sdram_synth boolean "" "" -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth system_info_arg hps_ip_suppress_sdram_synth -set_parameter_property quartus_ini_hps_ip_suppress_sdram_synth visible false - -add_parameter quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces system_info_arg hps_ip_enable_low_speed_serial_fpga_interfaces -set_parameter_property quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces visible false - -add_parameter quartus_ini_hps_ip_enable_bsel_csel boolean "" "" -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel system_info_arg hps_ip_enable_bsel_csel -set_parameter_property quartus_ini_hps_ip_enable_bsel_csel visible false - -add_parameter quartus_ini_hps_ip_f2sdram_bonding_out boolean "" "" -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out system_info_type quartus_ini -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out system_info_arg hps_ip_enable_f2sdram_bonding_out -set_parameter_property quartus_ini_hps_ip_f2sdram_bonding_out visible false - - -add_parameter quartus_ini_hps_emif_pll boolean "" "" -set_parameter_property quartus_ini_hps_emif_pll system_info_type quartus_ini -set_parameter_property quartus_ini_hps_emif_pll system_info_arg hps_emif_pll -set_parameter_property quartus_ini_hps_emif_pll visible false - - -proc load_test_iface_definition {} { - set csv_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/test_iface.csv - - set data [list] - set count 0 - csv_foreach_row $csv_file cols { - incr count - if {$count == 1} { - continue - } - - lassign_trimmed $cols port width dir - lappend data $port $width $dir - } - return $data -} -add_storage_parameter test_iface_definition [load_test_iface_definition] - -# order of interfaces per peripheral should be kept -# order of ports per interface should be kept -proc load_periph_ifaces_db {} { - set interfaces_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_peripheral_interfaces.csv - set peripherals_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_peripheral_atoms.csv - set ports_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_interface_ports.csv - set pins_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_port_pins.csv - set bfm_types_file $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_hps/fpga_bfm_types.csv - - # peripherals and interfaces - set peripherals([ORDERED_NAMES]) [list] - funset interface_ports - set count 0 - set PERIPHERAL_INTERFACES_PROPERTIES_COLUMNS_START 4 - csv_foreach_row $interfaces_file cols { - incr count - # skip header - if {$count == 1} { - set ordered_names [list] - set length [llength $cols] - for {set col $PERIPHERAL_INTERFACES_PROPERTIES_COLUMNS_START} {$col < $length} {incr col} { - set col_value [lindex $cols $col] - if {$col_value != ""} { - set property_to_col($col_value) $col - lappend ordered_names $col_value - } - } - set property_to_col([ORDERED_NAMES]) $ordered_names - continue - } - - set peripheral_name [string trim [lindex $cols 0]] - set interface_name [string trim [lindex $cols 1]] - set type [string trim [lindex $cols 2]] - set dir [string trim [lindex $cols 3]] - - funset peripheral - if {[info exists peripherals($peripheral_name)]} { - array set peripheral $peripherals($peripheral_name) - } else { - funset interfaces - set interfaces([ORDERED_NAMES]) [list] - set peripheral(interfaces) [array get interfaces] - set ordered_names $peripherals([ORDERED_NAMES]) - lappend ordered_names $peripheral_name - set peripherals([ORDERED_NAMES]) $ordered_names - } - funset interfaces - array set interfaces $peripheral(interfaces) - set ordered_names $interfaces([ORDERED_NAMES]) - lappend ordered_names $interface_name - set interfaces([ORDERED_NAMES]) $ordered_names - funset interface - set interface(type) $type - set interface(direction) $dir - funset properties - foreach property $property_to_col([ORDERED_NAMES]) { - set col $property_to_col($property) - set property_value [lindex $cols $col] - - if {$property_value != ""} { - # Add Meta Property - if { [string compare [string index ${property} 0] "@" ] == 0 } { - set interface(${property}) ${property_value} - } else { - set properties($property) $property_value - } - } - } - - set interface(properties) [array get properties] - - set interfaces($interface_name) [array get interface] - set peripheral(interfaces) [array get interfaces] - set peripherals($peripheral_name) [array get peripheral] - - funset ports - set ports([ORDERED_NAMES]) [list] - set interface_ports($interface_name) [array get ports] - } - set count 0 - csv_foreach_row $peripherals_file cols { ;# peripheral atom and location table - incr count - - # skip header - if {$count == 1} { - continue - } - - set peripheral_name [string trim [lindex $cols 0]] - set atom_name [string trim [lindex $cols 1]] - - funset peripheral - if {[info exists peripherals($peripheral_name)]} { - array set peripheral $peripherals($peripheral_name) - } else { - # Assume that if a peripheral hasn't be recognized until now, we won't be using it - continue - } - set peripheral(atom_name) $atom_name - set peripherals($peripheral_name) [array get peripheral] - } - add_parameter DB_periph_ifaces string [array get peripherals] "" - set_parameter_property DB_periph_ifaces derived true - set_parameter_property DB_periph_ifaces visible false - - set p [array get peripherals] - send_message debug "DB_periph_ifaces: ${p}" - - # ports - array set ports_to_pins {} - # # prepopulate interface_ports with names of interfaces that are known - # foreach {peripheral_name peripheral_string} [array get peripherals] { - # array set peripheral_array $peripheral_string - # foreach interface_name [array names peripheral_array] { - # set interface_ports($interface_name) {} - # } - # } - set count 0 - csv_foreach_row $ports_file cols { - incr count - - # skip header - if {$count == 1} continue - - set interface_name [string trim [lindex $cols 0]] - set port_name [string trim [lindex $cols 1]] - set role [string trim [lindex $cols 2]] - set dir [string trim [lindex $cols 3]] - set atom_signal_name [string trim [lindex $cols 4]] - - funset interface - array set interface $interface_ports($interface_name) - set ordered_names $interface([ORDERED_NAMES]) - lappend ordered_names $port_name - set interface([ORDERED_NAMES]) $ordered_names - - funset port - set port(role) $role - set port(direction) $dir - set port(atom_signal_name) $atom_signal_name - set interface($port_name) [array get port] - set interface_ports($interface_name) [array get interface] - - set ports_to_pins($port_name) {} - } - add_parameter DB_iface_ports string [array get interface_ports] "" - set_parameter_property DB_iface_ports derived true - set_parameter_property DB_iface_ports visible false - - set p [array get interface_ports] - send_message debug "DB_iface_ports: ${p}" - - # peripheral signals to ports - set count 0 - csv_foreach_row $pins_file cols { - incr count - - # skip header - if {$count == 1} continue - - set peripheral_name [string trim [lindex $cols 0]] - set pin_name [string trim [lindex $cols 1]] - set port_name [string trim [lindex $cols 2]] - - set is_multibit_signal [regexp {^([a-zA-Z0-9_]+)\[([0-9]+)\]} $port_name match real_name bit] - if {$is_multibit_signal == 0} { - set bit 0 - } else { - set port_name $real_name - } - - if {[info exists ports_to_pins($port_name)] == 0} { - send_message error "Peripheral ${peripheral_name} signal ${pin_name} is defined but corresponding FPGA signal ${port_name}\[${bit}\] is not" - } else { - funset port - array set port $ports_to_pins($port_name) - - if {[info exists port($bit)]} { - # collision! - send_message error "Signal ${port_name}\[${bit}\] is having original assignment ${peripheral_name}.${port($bit)} replaced with ${peripheral_name}.${pin_name}" - } - set port($bit) $pin_name - set ports_to_pins($port_name) [array get port] - } - } - add_parameter DB_port_pins string [array get ports_to_pins] "" - set_parameter_property DB_port_pins derived true - set_parameter_property DB_port_pins visible false - - set p [array get ports_to_pins] - send_message debug "DB_port_pins: ${p}" - - # bfm types - set count 0 - funset bfm_types - csv_foreach_row $bfm_types_file cols { - incr count - - # skip header - if {$count == 1} continue - - set bfm_type_name [string trim [lindex $cols 0]] - set property_name [string trim [lindex $cols 1]] - set value [string trim [lindex $cols 2]] - - if {[info exists bfm_types($bfm_type_name)] == 0} { - set bfm_types($bfm_type_name) {} - } - funset bfm_type - array set bfm_type $bfm_types($bfm_type_name) - set bfm_type($property_name) $value - set bfm_types($bfm_type_name) [array get bfm_type] - } - add_parameter DB_bfm_types string [array get bfm_types] "" - set_parameter_property DB_bfm_types derived true - set_parameter_property DB_bfm_types visible false - # TODO: what to do so that mode information on a peripheral.pin basis can be used for elaboration??? -} - -# only run during class creation -load_periph_ifaces_db - -####################### -##### Composition ##### -####################### - -namespace eval ::fpga_interfaces { - source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_interface_generator/api.tcl -} - -namespace eval ::hps_io { - namespace eval internal { - source $env(QUARTUS_ROOTDIR)/../ip/altera/hps/altera_interface_generator/api.tcl - } - variable pins - - proc add_peripheral {peripheral_name atom_name location} { - internal::add_module_instance $peripheral_name $atom_name $location - } - - # oe used in tristate output and inout - # out used in output and inout - # in used in input and inout - proc add_pin {peripheral_name pin_name dir location in_port out_port oe_port} { - variable pins - lappend pins [list $peripheral_name $pin_name $dir $location $in_port $out_port $oe_port] - } - - proc process_pins {} { - variable pins - - set interface_name "hps_io" - set hps_io_interface_created 0 - funset ports_used ;# set of inst/ports used - funset port_wire ;# map of ports to aliased wires - foreach pin $pins { ;# Check for multiple uses of the same port and create wires for those cases - lassign $pin peripheral_name pin_name dir location in_port out_port oe_port - - # check to see if port is used multiple times - foreach port_part [list $in_port $out_port $oe_port] { - if {$port_part != "" && [info exists ports_used($port_part)]} { - # Assume only outputs will be used multiple times. Inputs would be an error - if {[info exists port_wire($port_part)] == 0} { - set port_wire($port_part) [internal::allocate_wire] - # Drive new wire with port - internal::set_wire_port_fragments $port_wire($port_part) driven_by $port_part - } - } - set ports_used($port_part) 1 - } - } - - set qip [list] - foreach pin $pins { - lassign $pin peripheral_name pin_name dir location in_port out_port oe_port - foreach port_part_ref {in_port out_port oe_port} { ;# Replace ports with wires if needed - set port_part [set $port_part_ref] - if {[info exists port_wire($port_part)]} { - set $port_part_ref [internal::wire_tofragment $port_wire($port_part)] - } - } - - # Hook things up - set instance_name [string tolower $peripheral_name] ;# is this necessary??? - if {$hps_io_interface_created == 0} { - set hps_io_interface_created 1 - internal::add_interface $interface_name conduit input - } - set export_signal_name "hps_io_${instance_name}_${pin_name}" - internal::add_interface_port $interface_name $export_signal_name $export_signal_name $dir 1 - if {[string compare $dir "input"] == 0} { - internal::set_port_fragments $interface_name $export_signal_name $in_port - internal::add_raw_sdc_constraint "set_false_path -from \[get_ports ${interface_name}_${export_signal_name}\] -to *" - } elseif {[string compare $dir "output"] == 0} { - if {[string compare $oe_port "" ] == 0} { - internal::set_port_fragments $interface_name $export_signal_name $out_port - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } else { - internal::set_port_tristate_output $interface_name $export_signal_name $out_port $oe_port - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } - } else { - internal::set_port_fragments $interface_name $export_signal_name $in_port - internal::set_port_tristate_output $interface_name $export_signal_name $out_port $oe_port - internal::add_raw_sdc_constraint "set_false_path -from \[get_ports ${interface_name}_${export_signal_name}\] -to *" - internal::add_raw_sdc_constraint "set_false_path -from * -to \[get_ports ${interface_name}_${export_signal_name}\]" - } - set path_to_pin "hps_io|border|${export_signal_name}\[0\]" - set location_assignment "set_instance_assignment -name HPS_LOCATION ${location} -entity %entityName% -to ${path_to_pin}" - lappend qip $location_assignment - } - set_qip_strings $qip - } - - proc init {} { - internal::init - variable pins [list] - } - - proc serialize {var_name} { - upvar 1 $var_name data - process_pins - internal::serialize data - } -} - -set_module_property composition_callback compose - -proc compose {} { - # synchronize device families between the EMIF and HPS parameter sets - set_parameter_value hps_device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - fpga_interfaces::init - fpga_interfaces::set_bfm_types [array get DB_bfm_types] - - hps_io::init - validate - elab 0 - - update_hps_to_fpga_clock_frequency_parameters - - - fpga_interfaces::serialize fpga_interfaces_data - - add_instance fpga_interfaces altera_interface_generator - set_instance_parameter_value fpga_interfaces interfaceDefinition [array get fpga_interfaces_data] - - expose_border fpga_interfaces $fpga_interfaces_data(interfaces) - - declare_cmsis_svd $fpga_interfaces_data(interfaces) - - clear_array temp_array -} - -proc logicalview_dtg {} { - - set hard_peripheral_logical_view_dir $::env(QUARTUS_ROOTDIR)/../ip/altera/hps/hard_peripheral_logical_view - - source "$hard_peripheral_logical_view_dir/common/hps_utils.tcl" - - source "$hard_peripheral_logical_view_dir/hps_periphs/hps_periphs.tcl" - - set f2h_present [ expr [ get_parameter_value F2S_Width ] != 0] - set h2f_present [ expr [ get_parameter_value S2F_Width ] != 0] - set F2S_Width [ get_parameter_value F2S_Width ] - set S2F_Width [ get_parameter_value S2F_Width ] - set h2f_lw_present [ expr [ string compare [ get_parameter_value LWH2F_Enable ] "true" ] == 0 ] - set LWH2F_Enable [ get_parameter_value LWH2F_Enable ] - set device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - - # Need to add whole bunch of device tree generation parameters here (dtg) - # Getting whether is it single or dual core by checking the device family. List of single core: - # Cyclone V SE - regsub "^.* V" $device_family "" se_family - regsub " " $se_family "" se_family - - set number_of_a9 0 - if { [string toupper $se_family] == "SE"} { - set number_of_a9 1 - } else { - set number_of_a9 2 - } - - set F2SDRAM_Width [get_parameter_value F2SDRAM_Width] - set F2SDRAM_Type [get_parameter_value F2SDRAM_Type] - set quartus_ini_hps_ip_f2sdram_bonding_out [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] - set BONDING_OUT_ENABLED [get_parameter_value BONDING_OUT_ENABLED] - add_instance clk_0 hps_clk_src - hps_utils_add_instance_clk_reset clk_0 bridges hps_bridge_avalon - set_instance_parameter_value bridges F2S_Width $F2S_Width - set_instance_parameter_value bridges S2F_Width $S2F_Width - set_instance_parameter_value bridges BONDING_OUT_ENABLED $BONDING_OUT_ENABLED - set_instance_parameter_value bridges LWH2F_Enable $LWH2F_Enable - set_instance_parameter_value bridges quartus_ini_hps_ip_f2sdram_bonding_out $quartus_ini_hps_ip_f2sdram_bonding_out - add_interface h2f_reset reset output - set_interface_property h2f_reset EXPORT_OF bridges.h2f_reset - set_interface_property h2f_reset PORT_NAME_MAP "h2f_rst_n h2f_rst_n" - - set rows [llength $F2SDRAM_Width] - set type_list $F2SDRAM_Type - set append_type_list "" - set append_type_width "" - set total_command_port 0 - set total_write_port 0 - set total_read_port 0 - if {$rows > 0} { - for {set i 0} {${i} < $rows} {incr i} { - set type_choice [lindex $type_list $i] - set type_width [lindex $F2SDRAM_Width $i] - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type_id 1 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type_id 2 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - } - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type_id 3 - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_read_port [expr $total_read_port + 4] - } else { - set total_read_port [expr $total_read_port + 1] - } - } else { - set type_id 0 - if { [ expr $total_command_port % 2 ] } { - incr total_command_port 1 - } - set total_command_port [expr $total_command_port + 2] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - } - - if {$total_command_port > 6} { - if {$type_id == 0} { - send_message error "No command ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No command ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_read_port > 4} { - if {$type_id == 0} { - send_message error "No read ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No read ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_write_port > 4} { - if {$type_id == 0} { - send_message error "No write ports available to allocate AXI Interface f2h_sdram${i}" - } else { - send_message error "No write ports available to allocate Avalon-MM Interface f2h_sdram${i}" - } - } - if {$total_command_port < 7 && $total_write_port < 5 && $total_read_port < 5} { - lappend append_type_list $type_id - lappend append_type_width $type_width - } - } - } - set_instance_parameter_value bridges F2SDRAM_Type $append_type_list - set_instance_parameter_value bridges F2SDRAM_Width $append_type_width - set total_command_port 0 - set total_write_port 0 - set total_read_port 0 - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - - if {$rows > 0} { - for {set i 0} {${i} < $rows} {incr i} { - - set type_choice [lindex $type_list $i] - set type_width [lindex $F2SDRAM_Width $i] - - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_READDATA f2h_sdram${i}_READDATA f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READ f2h_sdram${i}_READ f2h_sdram${i}_WRITEDATA f2h_sdram${i}_WRITEDATA f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_WRITE f2h_sdram${i}_WRITE" - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WRITEDATA f2h_sdram${i}_WRITEDATA f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_BYTEENABLE f2h_sdram${i}_WRITE f2h_sdram${i}_WRITE" - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type "avalon" - set total_command_port [expr $total_command_port + 1] - if {$type_width == 128} { - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_read_port [expr $total_read_port + 4] - } else { - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ADDRESS f2h_sdram${i}_ADDRESS f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_BURSTCOUNT f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_WAITREQUEST f2h_sdram${i}_READDATA f2h_sdram${i}_READDATA f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READDATAVALID f2h_sdram${i}_READ f2h_sdram${i}_READ" - } else { - set type "axi" - if { [ expr $total_command_port % 2 ] } { - incr total_command_port 1 - } - set total_command_port [expr $total_command_port + 2] - if {$type_width == 128} { - set total_write_port [expr $total_write_port + 2] - set total_read_port [expr $total_read_port + 2] - } elseif {$type_width == 256 } { - set total_write_port [expr $total_write_port + 4] - set total_read_port [expr $total_read_port + 4] - } else { - set total_write_port [expr $total_write_port + 1] - set total_read_port [expr $total_read_port + 1] - } - set sdram_data "f2h_sdram${i}_ARADDR f2h_sdram${i}_ARADDR f2h_sdram${i}_ARLEN f2h_sdram${i}_ARLEN f2h_sdram${i}_ARID f2h_sdram${i}_ARID f2h_sdram${i}_ARSIZE f2h_sdram${i}_ARSIZE f2h_sdram${i}_ARBURST f2h_sdram${i}_ARBURST f2h_sdram${i}_ARLOCK f2h_sdram${i}_ARLOCK f2h_sdram${i}_ARPROT f2h_sdram${i}_ARPROT f2h_sdram${i}_ARVALID f2h_sdram${i}_ARVALID f2h_sdram${i}_ARCACHE f2h_sdram${i}_ARCACHE f2h_sdram${i}_AWADDR f2h_sdram${i}_AWADDR f2h_sdram${i}_AWLEN f2h_sdram${i}_AWLEN f2h_sdram${i}_AWID f2h_sdram${i}_AWID f2h_sdram${i}_AWSIZE f2h_sdram${i}_AWSIZE f2h_sdram${i}_AWBURST f2h_sdram${i}_AWBURST f2h_sdram${i}_AWLOCK f2h_sdram${i}_AWLOCK f2h_sdram${i}_AWPROT f2h_sdram${i}_AWPROT f2h_sdram${i}_AWVALID f2h_sdram${i}_AWVALID f2h_sdram${i}_AWCACHE f2h_sdram${i}_AWCACHE f2h_sdram${i}_BRESP f2h_sdram${i}_BRESP f2h_sdram${i}_BID f2h_sdram${i}_BID f2h_sdram${i}_BVALID f2h_sdram${i}_BVALID f2h_sdram${i}_BREADY f2h_sdram${i}_BREADY f2h_sdram${i}_ARREADY f2h_sdram${i}_ARREADY f2h_sdram${i}_AWREADY f2h_sdram${i}_AWREADY f2h_sdram${i}_RREADY f2h_sdram${i}_RREADY f2h_sdram${i}_RDATA f2h_sdram${i}_RDATA f2h_sdram${i}_RRESP f2h_sdram${i}_RRESP f2h_sdram${i}_RLAST f2h_sdram${i}_RLAST f2h_sdram${i}_RID f2h_sdram${i}_RID f2h_sdram${i}_RVALID f2h_sdram${i}_RVALID f2h_sdram${i}_WLAST f2h_sdram${i}_WLAST f2h_sdram${i}_WVALID f2h_sdram${i}_WVALID f2h_sdram${i}_WDATA f2h_sdram${i}_WDATA f2h_sdram${i}_WSTRB f2h_sdram${i}_WSTRB f2h_sdram${i}_WREADY f2h_sdram${i}_WREADY f2h_sdram${i}_WID f2h_sdram${i}_WID" - } - - if {$total_command_port > 6 || $total_write_port > 4 || $total_read_port > 4} { - break - } - add_interface f2h_sdram${i}_clock clock Input - set_interface_property f2h_sdram${i}_clock EXPORT_OF bridges.f2h_sdram${i}_clock - set_interface_property f2h_sdram${i}_clock PORT_NAME_MAP "f2h_sdram${i}_clk f2h_sdram${i}_clk" - add_interface f2h_sdram${i}_data $type slave - set_interface_property f2h_sdram${i}_data EXPORT_OF bridges.f2h_sdram${i}_data - set_interface_property f2h_sdram${i}_data PORT_NAME_MAP "$sdram_data" - } - - if $bonding_out_signal { - set bon_out_signal "f2h_sdram_BONOUT_1 f2h_sdram_BONOUT_1 f2h_sdram_BONOUT_2 f2h_sdram_BONOUT_2" - add_interface f2h_sdram_bon_out conduit Output - set_interface_property f2h_sdram_bon_out EXPORT_OF bridges.f2h_sdram_bon_out - set_interface_property f2h_sdram_bon_out PORT_NAME_MAP "$bon_out_signal" - } - - } - - set declared_svd_file 0 - set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps altera_hps.svd] - if { $h2f_present } { - hps_utils_add_slave_interface arm_a9_0.altera_axi_master bridges.axi_h2f {0xc0000000} - if { $number_of_a9 > 1 } { - hps_utils_add_slave_interface arm_a9_1.altera_axi_master bridges.axi_h2f {0xc0000000} - } - - add_interface h2f_axi_clock clock Input - set_interface_property h2f_axi_clock EXPORT_OF bridges.h2f_axi_clock - set_interface_property h2f_axi_clock PORT_NAME_MAP "h2f_axi_clk h2f_axi_clk" - - add_interface h2f_axi_master axi master - set_interface_property h2f_axi_master EXPORT_OF bridges.h2f - set_interface_property h2f_axi_master PORT_NAME_MAP "h2f_AWID h2f_AWID h2f_AWADDR h2f_AWADDR h2f_AWLEN h2f_AWLEN h2f_AWSIZE h2f_AWSIZE h2f_AWBURST h2f_AWBURST h2f_AWLOCK h2f_AWLOCK h2f_AWCACHE h2f_AWCACHE h2f_AWPROT h2f_AWPROT h2f_AWVALID h2f_AWVALID h2f_AWREADY h2f_AWREADY h2f_WID h2f_WID h2f_WDATA h2f_WDATA h2f_WSTRB h2f_WSTRB h2f_WLAST h2f_WLAST h2f_WVALID h2f_WVALID h2f_WREADY h2f_WREADY h2f_BID h2f_BID h2f_BRESP h2f_BRESP h2f_BVALID h2f_BVALID h2f_BREADY h2f_BREADY h2f_ARID h2f_ARID h2f_ARADDR h2f_ARADDR h2f_ARLEN h2f_ARLEN h2f_ARSIZE h2f_ARSIZE h2f_ARBURST h2f_ARBURST h2f_ARLOCK h2f_ARLOCK h2f_ARCACHE h2f_ARCACHE h2f_ARPROT h2f_ARPROT h2f_ARVALID h2f_ARVALID h2f_ARREADY h2f_ARREADY h2f_RID h2f_RID h2f_RDATA h2f_RDATA h2f_RRESP h2f_RRESP h2f_RLAST h2f_RLAST h2f_RVALID h2f_RVALID h2f_RREADY h2f_RREADY" - set_interface_property h2f_axi_master SVD_ADDRESS_GROUP "hps" - set_interface_property h2f_axi_master SVD_ADDRESS_OFFSET 0xC0000000 - if {!$declared_svd_file} { - set_interface_property h2f_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - } - - if { $f2h_present } { - add_interface f2h_axi_clock clock Input - set_interface_property f2h_axi_clock EXPORT_OF bridges.f2h_axi_clock - set_interface_property f2h_axi_clock PORT_NAME_MAP "f2h_axi_clk f2h_axi_clk" - - add_interface f2h_axi_slave axi slave - set_interface_property f2h_axi_slave EXPORT_OF bridges.f2h - set_interface_property f2h_axi_slave PORT_NAME_MAP "f2h_AWID f2h_AWID f2h_AWADDR f2h_AWADDR f2h_AWLEN f2h_AWLEN f2h_AWSIZE f2h_AWSIZE f2h_AWBURST f2h_AWBURST f2h_AWLOCK f2h_AWLOCK f2h_AWCACHE f2h_AWCACHE f2h_AWPROT f2h_AWPROT f2h_AWVALID f2h_AWVALID f2h_AWREADY f2h_AWREADY f2h_AWUSER f2h_AWUSER f2h_WID f2h_WID f2h_WDATA f2h_WDATA f2h_WSTRB f2h_WSTRB f2h_WLAST f2h_WLAST f2h_WVALID f2h_WVALID f2h_WREADY f2h_WREADY f2h_BID f2h_BID f2h_BRESP f2h_BRESP f2h_BVALID f2h_BVALID f2h_BREADY f2h_BREADY f2h_ARID f2h_ARID f2h_ARADDR f2h_ARADDR f2h_ARLEN f2h_ARLEN f2h_ARSIZE f2h_ARSIZE f2h_ARBURST f2h_ARBURST f2h_ARLOCK f2h_ARLOCK f2h_ARCACHE f2h_ARCACHE f2h_ARPROT f2h_ARPROT f2h_ARVALID f2h_ARVALID f2h_ARREADY f2h_ARREADY f2h_ARUSER f2h_ARUSER f2h_RID f2h_RID f2h_RDATA f2h_RDATA f2h_RRESP f2h_RRESP f2h_RLAST f2h_RLAST f2h_RVALID f2h_RVALID f2h_RREADY f2h_RREADY" - } - - if { $h2f_lw_present } { - hps_utils_add_slave_interface arm_a9_0.altera_axi_master bridges.axi_h2f_lw {0xff200000} - if { $number_of_a9 > 1 } { - hps_utils_add_slave_interface arm_a9_1.altera_axi_master bridges.axi_h2f_lw {0xff200000} - } - - add_interface h2f_lw_axi_clock clock Input - set_interface_property h2f_lw_axi_clock EXPORT_OF bridges.h2f_lw_axi_clock - set_interface_property h2f_lw_axi_clock PORT_NAME_MAP "h2f_lw_axi_clk h2f_lw_axi_clk" - - add_interface h2f_lw_axi_master axi start - set_interface_property h2f_lw_axi_master EXPORT_OF bridges.h2f_lw - set_interface_property h2f_lw_axi_master PORT_NAME_MAP "h2f_lw_AWID h2f_lw_AWID h2f_lw_AWADDR h2f_lw_AWADDR h2f_lw_AWLEN h2f_lw_AWLEN h2f_lw_AWSIZE h2f_lw_AWSIZE h2f_lw_AWBURST h2f_lw_AWBURST h2f_lw_AWLOCK h2f_lw_AWLOCK h2f_lw_AWCACHE h2f_lw_AWCACHE h2f_lw_AWPROT h2f_lw_AWPROT h2f_lw_AWVALID h2f_lw_AWVALID h2f_lw_AWREADY h2f_lw_AWREADY h2f_lw_WID h2f_lw_WID h2f_lw_WDATA h2f_lw_WDATA h2f_lw_WSTRB h2f_lw_WSTRB h2f_lw_WLAST h2f_lw_WLAST h2f_lw_WVALID h2f_lw_WVALID h2f_lw_WREADY h2f_lw_WREADY h2f_lw_BID h2f_lw_BID h2f_lw_BRESP h2f_lw_BRESP h2f_lw_BVALID h2f_lw_BVALID h2f_lw_BREADY h2f_lw_BREADY h2f_lw_ARID h2f_lw_ARID h2f_lw_ARADDR h2f_lw_ARADDR h2f_lw_ARLEN h2f_lw_ARLEN h2f_lw_ARSIZE h2f_lw_ARSIZE h2f_lw_ARBURST h2f_lw_ARBURST h2f_lw_ARLOCK h2f_lw_ARLOCK h2f_lw_ARCACHE h2f_lw_ARCACHE h2f_lw_ARPROT h2f_lw_ARPROT h2f_lw_ARVALID h2f_lw_ARVALID h2f_lw_ARREADY h2f_lw_ARREADY h2f_lw_RID h2f_lw_RID h2f_lw_RDATA h2f_lw_RDATA h2f_lw_RRESP h2f_lw_RRESP h2f_lw_RLAST h2f_lw_RLAST h2f_lw_RVALID h2f_lw_RVALID h2f_lw_RREADY h2f_lw_RREADY" - set_interface_property h2f_lw_axi_master SVD_ADDRESS_GROUP "hps" - set_interface_property h2f_lw_axi_master SVD_ADDRESS_OFFSET 0xFF200000 - if {!$declared_svd_file} { - set_interface_property h2f_lw_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - } - - if {!$declared_svd_file} { - set_module_assignment "cmsis.svd.file" $svd_path - set_module_assignment "cmsis.svd.suffix" "hps" - } - - clocks_logicalview_dtg - - if { $number_of_a9 > 0 } { - hps_utils_add_instance_clk_reset clk_0 arm_a9_0 arm_a9 - } - - if { $number_of_a9 > 1 } { - hps_utils_add_instance_clk_reset clk_0 arm_a9_1 arm_a9 - } - - - hps_instantiate_arm_gic_0 $number_of_a9 - - hps_instantiate_L2 $number_of_a9 - - hps_instantiate_dma $number_of_a9 - - hps_instantiate_sysmgr $number_of_a9 - - hps_instantiate_clkmgr $number_of_a9 - - hps_instantiate_rstmgr $number_of_a9 - - hps_instantiate_fpgamgr $number_of_a9 - - hps_instantiate_uart0 $number_of_a9 "UART0_PinMuxing" [get_parameter_value l4_sp_clk_mhz] - - hps_instantiate_uart1 $number_of_a9 "UART1_PinMuxing" [get_parameter_value l4_sp_clk_mhz] - - hps_instantiate_timer0 $number_of_a9 - - hps_instantiate_timer1 $number_of_a9 - - hps_instantiate_timer2 $number_of_a9 - - hps_instantiate_timer3 $number_of_a9 - - hps_instantiate_wd_timer0 $number_of_a9 - - hps_instantiate_wd_timer1 $number_of_a9 - - hps_instantiate_gpio0 $number_of_a9 - - hps_instantiate_gpio1 $number_of_a9 - - hps_instantiate_gpio2 $number_of_a9 - - hps_instantiate_i2c0 $number_of_a9 "I2C0_PinMuxing" - - hps_instantiate_i2c1 $number_of_a9 "I2C1_PinMuxing" - - hps_instantiate_i2c2 $number_of_a9 "I2C2_PinMuxing" - - hps_instantiate_i2c3 $number_of_a9 "I2C3_PinMuxing" - - hps_instantiate_nand0 $number_of_a9 "NAND_PinMuxing" - - hps_instantiate_spim0 $number_of_a9 "SPIM0_PinMuxing" - - hps_instantiate_spim1 $number_of_a9 "SPIM1_PinMuxing" - - hps_instantiate_qspi $number_of_a9 "QSPI_PinMuxing" - - hps_instantiate_sdmmc $number_of_a9 "SDIO_PinMuxing" - - hps_instantiate_usb0 $number_of_a9 "USB0_PinMuxing" - - hps_instantiate_usb1 $number_of_a9 "USB1_PinMuxing" - - hps_instantiate_gmac0 $number_of_a9 "EMAC0_PinMuxing" - - hps_instantiate_gmac1 $number_of_a9 "EMAC1_PinMuxing" - - hps_instantiate_dcan0 $number_of_a9 "CAN0_PinMuxing" - - hps_instantiate_dcan1 $number_of_a9 "CAN1_PinMuxing" - - hps_instantiate_l3regs $number_of_a9 - - hps_instantiate_sdrctl $number_of_a9 - - hps_instantiate_axi_ocram $number_of_a9 - - hps_instantiate_axi_sdram $number_of_a9 - - hps_instantiate_timer $number_of_a9 - - hps_instantiate_scu $number_of_a9 - - add_connection arm_gic_0.arm_gic_ppi timer.interrupt_sender - set_connection_parameter_value arm_gic_0.arm_gic_ppi/timer.interrupt_sender irqNumber 13 - - if { $f2h_present } { - hps_utils_add_slave_interface bridges.axi_f2h arm_gic_0.axi_slave0 {0xfffed000} - hps_utils_add_slave_interface bridges.axi_f2h arm_gic_0.axi_slave1 {0xfffec100} - hps_utils_add_slave_interface bridges.axi_f2h L2.axi_slave0 {0xfffef000} - hps_utils_add_slave_interface bridges.axi_f2h dma.axi_slave0 {0xffe01000} - hps_utils_add_slave_interface bridges.axi_f2h sysmgr.axi_slave0 {0xffd08000} - hps_utils_add_slave_interface bridges.axi_f2h clkmgr.axi_slave0 {0xffd04000} - hps_utils_add_slave_interface bridges.axi_f2h rstmgr.axi_slave0 {0xffd05000} - hps_utils_add_slave_interface bridges.axi_f2h fpgamgr.axi_slave0 {0xff706000} - hps_utils_add_slave_interface bridges.axi_f2h fpgamgr.axi_slave1 {0xffb90000} - hps_utils_add_slave_interface bridges.axi_f2h uart0.axi_slave0 {0xffc02000} - hps_utils_add_slave_interface bridges.axi_f2h uart1.axi_slave0 {0xffc03000} - hps_utils_add_slave_interface bridges.axi_f2h timer0.axi_slave0 {0xffc08000} - hps_utils_add_slave_interface bridges.axi_f2h timer1.axi_slave0 {0xffc09000} - hps_utils_add_slave_interface bridges.axi_f2h timer2.axi_slave0 [hps_timer2_base] - hps_utils_add_slave_interface bridges.axi_f2h timer3.axi_slave0 [hps_timer3_base] - hps_utils_add_slave_interface bridges.axi_f2h gpio0.axi_slave0 {0xff708000} - hps_utils_add_slave_interface bridges.axi_f2h gpio1.axi_slave0 {0xff709000} - hps_utils_add_slave_interface bridges.axi_f2h gpio2.axi_slave0 {0xff70a000} - hps_utils_add_slave_interface bridges.axi_f2h i2c0.axi_slave0 {0xffc04000} - hps_utils_add_slave_interface bridges.axi_f2h i2c1.axi_slave0 {0xffc05000} - hps_utils_add_slave_interface bridges.axi_f2h i2c2.axi_slave0 {0xffc06000} - hps_utils_add_slave_interface bridges.axi_f2h i2c3.axi_slave0 {0xffc07000} - hps_utils_add_slave_interface bridges.axi_f2h nand0.axi_slave0 {0xff900000} - hps_utils_add_slave_interface bridges.axi_f2h nand0.axi_slave1 {0xffb80000} - hps_utils_add_slave_interface bridges.axi_f2h spim0.axi_slave0 [hps_spim0_base] - hps_utils_add_slave_interface bridges.axi_f2h spim1.axi_slave0 [hps_spim1_base] - hps_utils_add_slave_interface bridges.axi_f2h qspi.axi_slave0 {0xff705000} - hps_utils_add_slave_interface bridges.axi_f2h qspi.axi_slave1 {0xffa00000} - hps_utils_add_slave_interface bridges.axi_f2h sdmmc.axi_slave0 {0xff704000} - hps_utils_add_slave_interface bridges.axi_f2h usb0.axi_slave0 {0xffb00000} - hps_utils_add_slave_interface bridges.axi_f2h usb1.axi_slave0 {0xffb40000} - hps_utils_add_slave_interface bridges.axi_f2h gmac0.axi_slave0 {0xff700000} - hps_utils_add_slave_interface bridges.axi_f2h gmac1.axi_slave0 {0xff702000} - hps_utils_add_slave_interface bridges.axi_f2h axi_ocram.axi_slave0 {0xffff0000} - hps_utils_add_slave_interface bridges.axi_f2h axi_sdram.axi_slave0 [hps_sdram_base] - hps_utils_add_slave_interface bridges.axi_f2h timer.axi_slave0 {0xfffec600} - hps_utils_add_slave_interface bridges.axi_f2h dcan0.axi_slave0 [hps_dcan0_base] - hps_utils_add_slave_interface bridges.axi_f2h dcan1.axi_slave0 [hps_dcan1_base] - hps_utils_add_slave_interface bridges.axi_f2h l3regs.axi_slave0 [hps_l3regs_base] - hps_utils_add_slave_interface bridges.axi_f2h sdrctl.axi_slave0 [hps_sdrctl_base] - } - - ##### F2H ##### - if [is_enabled F2SINTERRUPT_Enable] { - set any_interrupt_enabled 1 - set iname "f2h_irq" - set pname "f2h_irq" - add_interface "${iname}0" interrupt receiver - set_interface_property f2h_irq0 EXPORT_OF arm_gic_0.f2h_irq_0_irq_rx_offset_40 - set_interface_property f2h_irq0 PORT_NAME_MAP "f2h_irq_p0 irq_siq_40" - - add_interface "${iname}1" interrupt receiver - set_interface_property f2h_irq1 EXPORT_OF arm_gic_0.f2h_irq_32_irq_rx_offset_72 - set_interface_property f2h_irq1 PORT_NAME_MAP "f2h_irq_p1 irq_siq_72" - } -} - -set_module_property OPAQUE_ADDRESS_MAP false -set_module_property STRUCTURAL_COMPOSITION_CALLBACK compose_logicalview -proc compose_logicalview {} { - # synchronize device families between the EMIF and HPS parameter sets - set_parameter_value hps_device_family [get_parameter_value SYS_INFO_DEVICE_FAMILY] - fpga_interfaces::init - fpga_interfaces::set_bfm_types [array get DB_bfm_types] - - hps_io::init - validate - elab 1 - - update_hps_to_fpga_clock_frequency_parameters - - - fpga_interfaces::serialize fpga_interfaces_data - - add_instance fpga_interfaces altera_interface_generator - set_instance_parameter_value fpga_interfaces interfaceDefinition [array get fpga_interfaces_data] - - expose_border fpga_interfaces $fpga_interfaces_data(interfaces) - - #declare_cmsis_svd $fpga_interfaces_data(interfaces) - - logicalview_dtg -} - -proc declare_cmsis_svd {interfaces_str} { - array set interfaces $interfaces_str - set interface_names $interfaces([ORDERED_NAMES]) - - set h2f_exists 0 - set lwh2f_exists 0 - foreach interface_name $interface_names { - if {[string compare $interface_name "h2f_axi_master"] == 0} { - set h2f_exists 1 - } elseif {[string compare $interface_name "h2f_lw_axi_master"] == 0} { - set lwh2f_exists 1 - } - } - - set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps altera_hps.svd] - set address_group hps - set declared_svd_file 0 - - if {$h2f_exists} { - if {!$declared_svd_file} { - set_interface_property h2f_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - set_interface_property h2f_axi_master SVD_ADDRESS_GROUP $address_group - set_interface_property h2f_axi_master SVD_ADDRESS_OFFSET 0xC0000000 - } - if {$lwh2f_exists} { - if {!$declared_svd_file} { - set_interface_property h2f_lw_axi_master CMSIS_SVD_FILE $svd_path - set declared_svd_file 1 - } - set_interface_property h2f_lw_axi_master SVD_ADDRESS_GROUP $address_group - set_interface_property h2f_lw_axi_master SVD_ADDRESS_OFFSET 0xFF200000 - } - if {!$declared_svd_file} { - set_module_assignment "cmsis.svd.file" $svd_path - set_module_assignment "cmsis.svd.suffix" $address_group - } -} - - -###################### -##### Validation ##### -###################### - -proc validate {} { - set device_family [get_parameter_value hps_device_family] - set device [get_device] - ensure_pin_muxing_data $device_family - update_table_derived_parameters - - validate_F2SDRAM - update_S2F_CLK_mux_options - update_pin_muxing_ui $device_family - - # funset placement_by_pin - validate_pin_muxing $device_family placement_by_pin - update_gpio_ui placement_by_pin - - validate_TEST - - validate_interrupt $device_family - - validate_clocks - -} - -proc validate_TEST {} { - set ini [get_parameter_value quartus_ini_hps_ip_enable_test_interface] - set_parameter_property TEST_Enable visible $ini -} - -proc hide_param { paramName hide} { - -} -proc update_hps_to_fpga_clock_frequency_parameters {} { - set u0 [get_parameter_value S2FCLK_USER0CLK_Enable] - set u1 [get_parameter_value S2FCLK_USER1CLK_Enable] - #set u2 [get_parameter_value S2FCLK_USER2CLK_Enable] - - for { set i 0 } { $i < 2 } { incr i } { - set_parameter_property "S2FCLK_USER${i}CLK_FREQ" enabled [expr "\$u${i}"] - - if { [string compare true [expr "\$u${i}"] ] == 0 } { - fpga_interfaces::set_interface_property "h2f_user${i}_clock" clockRateKnown true - fpga_interfaces::set_interface_property "h2f_user${i}_clock" clockRate [expr [get_parameter_value "S2FCLK_USER${i}CLK_FREQ"] * 1000000 ] - } - } -} - -proc update_table_derived_parameters {} { - update_f2sdram_names - update_dma_peripheral_ids -} - -proc update_f2sdram_names {} { - set num_rows [llength [get_parameter_value F2SDRAM_Width]] - set names [list] - - for {set index 0} {$index < $num_rows} {incr index} { - set name "f2h_sdram${index}" - lappend names $name - } - set_parameter_value F2SDRAM_Name_DERIVED ${names} -} - -proc update_dma_peripheral_ids {} { - set periph_id_list {0 1 2 3 4 5 6 7} - set_parameter_value DMA_PeriphId_DERIVED $periph_id_list -} - -proc is_enabled {parameter} { - if { [string compare [get_parameter_value $parameter] "true" ] == 0 } { - return 1 - } else { - return 0 - } -} - -proc validate_F2SDRAM {} { - set type_list [get_parameter_value F2SDRAM_Type] - set width_list [get_parameter_value F2SDRAM_Width] - set rows [llength $width_list] - - set command_ports_bit 0 - set read_ports_bit 0 - set write_ports_bit 0 - - set command_ports_mask 0 - set read_ports_mask 0 - set write_ports_mask 0 - set reset_ports_mask 0 - - for {set index 0} {${index} < ${rows}} {incr index} { - # check for invalid combinations of type/width - set mytype [lindex $type_list $index] - set mywidth [lindex $width_list $index] - - if {$mywidth < 64} { - send_message warning "Setting the slave port width of interface f2h_sdram${index} to ${mywidth} results in bandwidth under-utilization. Altera recommends you set the interface data width to 64-bit or greater." - } - - # count used ports - # command - if { [string compare $mytype [F2HSDRAM_AXI3]] == 0 } { - if { [ expr $command_ports_bit % 2 ] } { - incr command_ports_bit 1 - } - set command_ports_mask [ expr $command_ports_mask | ( 3 << $command_ports_bit) ] - incr command_ports_bit 2 - } else { - set command_ports_mask [ expr $command_ports_mask | ( 1 << $command_ports_bit) ] - incr command_ports_bit 1 - } - - # read - if {$mytype != [F2HSDRAM_AVM_WRITEONLY]} { - if {$mywidth <= 64} { - set read_ports_mask [ expr $read_ports_mask | ( 1 << $read_ports_bit) ] - incr read_ports_bit 1 - } elseif {$mywidth == 128} { - set read_ports_mask [ expr $read_ports_mask | ( 3 << $read_ports_bit) ] - incr read_ports_bit 2 - } else { - set read_ports_mask [ expr $read_ports_mask | ( 15 << $read_ports_bit) ] - incr read_ports_bit 4 - } - } - - # write - if {$mytype != [F2HSDRAM_AVM_READONLY]} { - if {$mywidth <= 64} { - set write_ports_mask [ expr $write_ports_mask | ( 1 << $write_ports_bit) ] - incr write_ports_bit 1 - } elseif {$mywidth == 128} { - set write_ports_mask [ expr $write_ports_mask | ( 3 << $write_ports_bit) ] - incr write_ports_bit 2 - } else { - set write_ports_mask [ expr $write_ports_mask | ( 15 << $write_ports_bit) ] - incr write_ports_bit 4 - } - } - - # reset - set reset_ports_mask [ expr ($command_ports_mask << 8) | ($write_ports_mask << 4) | ($read_ports_mask) ] - - } - # check for port over-use - if {$command_ports_bit > 6} { - send_message error "The current FPGA to SDRAM configuration is using more command ports than are available." - } - if {$read_ports_bit > 4} { - send_message error "The current FPGA to SDRAM configuration is using more read ports than are available." - } - if {$write_ports_bit > 4} { - send_message error "The current FPGA to SDRAM configuration is using more write ports than are available." - } - - # Store ports used & number of elements to determine when new rows are added - set_parameter_value F2SDRAM_Width_Last_Size $rows - set_parameter_value F2SDRAM_CMD_PORT_USED [ format "0x%X" $command_ports_mask ] - set_parameter_value F2SDRAM_RD_PORT_USED [ format "0x%X" $read_ports_mask ] - set_parameter_value F2SDRAM_WR_PORT_USED [ format "0x%X" $write_ports_mask ] - set_parameter_value F2SDRAM_RST_PORT_USED [ format "0x%X" $reset_ports_mask ] - - # Bonding_out signals will be exported if f2sdram selected - if { ${rows} > 0 } { - set param [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] - set_parameter_property BONDING_OUT_ENABLED visible $param - set_parameter_property BONDING_OUT_ENABLED enabled $param - } else { - set_parameter_property BONDING_OUT_ENABLED enabled false - } - -} - -proc update_S2F_CLK_mux_options {} { - # TODO: retrieve mux options - # TODO: set allowed_ranges on muxes -} - -proc dec2bin {i} { - set res {} - while {$i>0} { - set res [ expr {$i%2} ]$res - set i [expr {$i/2}] - } - if {$res == {}} { - set res 0 - } - return $res -} - -##################################################################### -# -# Gets valid modes for a peripheral with a given pin muxing option. -# Parameters: * peripheral_ref: name of an array pointing to the -# Peripheral HPS I/O Data -# -# Update parameter value with label -proc get_valid_modes {peripheral_name pin_muxing_option peripheral_ref fpga_available} { -##################################################################### - upvar 1 $peripheral_ref peripheral - - if {[info exists peripheral(pin_sets)]} { - array set pin_sets $peripheral(pin_sets) - } - - if {[info exists pin_sets($pin_muxing_option)]} { - array set pin_set $pin_sets($pin_muxing_option) - set pin_set_modes $pin_set(valid_modes) - if {[string match -nocase "trace" $peripheral_name]} { - set valid_modes [list "HPS:8-bit Data" "HPSx4:4-bit Data"] - } elseif {[string match -nocase "usb*" $peripheral_name]} { - set valid_modes [list "SDR:SDR with PHY clock output mode" "SDR without external clock:SDR with PHY clock input mode"] - } else { - set valid_modes [lsort -ascii -increasing $pin_set_modes] - } - } elseif {$fpga_available && [string compare $pin_muxing_option [FPGA_MUX_VALUE]] == 0} { - set valid_modes [list "Full"] - } else { - set valid_modes [list [NA_MODE_VALUE]] - } - return $valid_modes -} - -proc is_peripheral_low_speed_serial_interface {peripheral_name} { - if {[string match -nocase "i2c*" $peripheral_name] || - [string match -nocase "can*" $peripheral_name] || - [string match -nocase "spi*" $peripheral_name] || - [string match -nocase "uart*" $peripheral_name] - } { - return 1 - } - return 0 -} - -# updates the _PinMuxing and _Mode parameter allowed ranges -# -uses a data structure to keep track of choices -# -allowed ranges can come from FPGA Peripheral Interfaces or IOs -# -when a pin muxing option is selected, the mode allowed ranges are -# set according to what's specified from the source (FPGA or pin i/o) -proc update_pin_muxing_ui {device_family} { - - set peripheral_names [list_peripheral_names] - foreach peripheral $peripheral_names { - - get_peripheral_parameter_valid_ranges hps_ip_pin_muxing_model $peripheral\ - selected_pin_muxing_option pin_muxing_options mode_options - - set pin_muxing_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral] - set mode_param_name [format [MODE_PARAM_FORMAT] $peripheral] - - set pin_muxing_options [lsort -ascii $pin_muxing_options] - set pin_muxing_options [linsert $pin_muxing_options 0 [UNUSED_MUX_VALUE]] - set_parameter_property $pin_muxing_param_name enabled true - set_parameter_property $pin_muxing_param_name visible true - set_parameter_property $pin_muxing_param_name allowed_ranges $pin_muxing_options - set_parameter_property $mode_param_name visible true - - - set selected_mode_option [get_parameter_value $mode_param_name] - - # Disable I2C parameters so they can only be changed by altering EMAC parameters - # in the HPS IP GUI - if {([string compare $peripheral "I2C2" ] == 0 || [string compare $peripheral "I2C3" ] == 0) - && [string match "*EMAC*" $selected_mode_option]} { - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $mode_param_name enabled false - } else { - set_parameter_property $mode_param_name enabled true - } - set_parameter_property $mode_param_name allowed_ranges $mode_options - - # Disabled peripherals that not supported by certain device family - if {[check_device_family_equivalence $device_family ARRIAV]} { - foreach excluded_peripheral [ARRIAV_EXCLUDED_PERIPHRERALS] { - if {[string compare $excluded_peripheral $peripheral] == 0} { - set_parameter_property $pin_muxing_param_name enabled false - set_parameter_property $pin_muxing_param_name visible false - set_parameter_property $mode_param_name enabled false - set_parameter_property $mode_param_name visible false - } - } - } - } - - # Only show I2C's "Used by EMACx" modes when EMAC is using I2C - if {[is_pin_mux_data_available hps_ip_pin_muxing_model]} { - foreach emac {EMAC0 EMAC1} { - set emac_pin_set [get_parameter_value [format [PIN_MUX_PARAM_FORMAT] $emac]] - set emac_mode [get_parameter_value [format [MODE_PARAM_FORMAT] $emac]] - - funset i2c_name - get_linked_peripheral hps_ip_pin_muxing_model $emac $emac_pin_set\ - i2c_name i2c_pin_set i2c_mode - - if {[info exists i2c_name] && ![string match "*${i2c_name}*" $emac_mode]} { - # remove EMAC mode - set i2c_mode_param [format [MODE_PARAM_FORMAT] $i2c_name] - set i2c_valid_modes [get_parameter_property $i2c_mode_param ALLOWED_RANGES] - - set new_i2c_valid_modes [list] - foreach mode $i2c_valid_modes { - if {![string match "*${emac}*" $mode]} { - lappend new_i2c_valid_modes $mode - } - } - set_parameter_property $i2c_mode_param ALLOWED_RANGES $new_i2c_valid_modes - } - } - } -} - -proc validate_interrupt {device_family} { - set interrupt_groups [list_h2f_interrupt_groups] - set excluded "CAN" - foreach interrupt_group $interrupt_groups { - set parameter "S2FINTERRUPT_${interrupt_group}_Enable" - set_parameter_property $parameter enabled true - set_parameter_property $parameter visible true - if {[check_device_family_equivalence $device_family ARRIAV] && [string compare $excluded $interrupt_group] == 0} { - set_parameter_property $parameter enabled false - set_parameter_property $parameter visible false - } - } -} - -proc update_gpio_ui {placement_by_pin_ref} { - upvar 1 $placement_by_pin_ref placement_by_pin - # TODO: caching of what needs to be updated? - set customer_pin_names [list] - set gpio_names [list] - set loanio_names [list] - set conflicts [list] - - set customer_pin_names [hps_ip_pin_muxing_model::get_customer_pin_names] - - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - lappend gpio_names $gpio_name - - set conflict "" - if {[info exists placement_by_pin($pin)]} { - set conflict [join $placement_by_pin($pin) ", "] - } - lappend conflicts $conflict - } - foreach_loan_io_entry hps_ip_pin_muxing_model\ - entry loanio_index loanio_name pin gplin_used gplin_select\ - { - lappend loanio_names $loanio_name - } - set_parameter_value Customer_Pin_Name_DERIVED $customer_pin_names - set_parameter_value GPIO_Name_DERIVED $gpio_names - set_parameter_value LOANIO_Name_DERIVED $loanio_names - set_parameter_value GPIO_Conflict_DERIVED $conflicts -} - -proc peripheral_to_wys_atom_name {device_family peripheral} { - set generic_atom_name [hps_io_peripheral_to_generic_atom_name $peripheral] - set wys_atom_name [generic_atom_to_wys_atom $device_family $generic_atom_name] - return $wys_atom_name -} - -# TODO: deal with going out of bounds (gpio_index > 70) -proc gpio_index_to_gpio_port_index {gpio_index} { - set group [expr {$gpio_index / 29}] - set port_index [expr {$gpio_index % 29}] - - set result [list $group $port_index] - return $result -} - - - -proc validate_pin_muxing {device_family placement_by_pin_ref} { - upvar 1 $placement_by_pin_ref placement_by_pin - - # see which pins are being used more than once - # peripherals - funset pin_to_peripheral ;# pin names to peripheral that is occupying - funset conflict_pin_list ; - - foreach peripheral_name [list_peripheral_names] { - set pins_used 0 - set mapping_msg "Peripheral $peripheral_name pin mapping:" - set comma " " - set periph_inst [string tolower "${peripheral_name}_inst"] - foreach_used_peripheral_pin hps_ip_pin_muxing_model $peripheral_name\ - signal_name\ - map\ - pin\ - location\ - mux_select\ - { - # Validate - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists == 1} { - set conflicting_peripheral $pin_to_peripheral($pin) - # only emit an error once per unique pair of conflicting peripherals - if {[info exists known_conflicts($conflicting_peripheral)] == 0} { - set known_conflicts($conflicting_peripheral) 1 - # TODO: more detailed error message e.g. which pins? explicitly say the bank and modes? - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripherals '$conflicting_peripheral' and '$peripheral_name' are conflicting. " - } - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $peripheral_name - } - - # Render pins - lassign $map in_port out_port oe_port - set goes_out 0 - set goes_in 0 - - # by default, all signals are assumed to be from the same instance - if {$in_port != ""} { - set in_port "${periph_inst}:${in_port}" - set goes_in 1 - } - if {$out_port != ""} { - set out_port "${periph_inst}:${out_port}" - set goes_out 1 - } - if {$oe_port != ""} { - set oe_port "${periph_inst}:${oe_port}" - set goes_out 1 - } - - if {$goes_in && $goes_out} { - set dir bidir - } elseif {$goes_out} { - set dir output - } else { - set dir input - } - - hps_io::add_pin $periph_inst $signal_name $dir $location $in_port $out_port $oe_port - - if {[info exists placement_by_pin($pin)] == 0} { - set placement_by_pin($pin) [list] - } - lappend placement_by_pin($pin) "${peripheral_name}.${signal_name}" - - set mapping_msg "${mapping_msg}${comma}${signal_name}:${pin}" - set comma ", " - set pins_used 1 - } - if {$pins_used} { - # send_message info $mapping_msg - set wys_atom_name [peripheral_to_wys_atom_name $device_family $peripheral_name] - set location [locations::get_hps_io_peripheral_location $peripheral_name] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $location - } - } - - # HLGPI input only pins - set hlgpi_pins [hps_ip_pin_muxing_model::get_hlgpi_pins] - set hlgpi_count [llength $hlgpi_pins] - set wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set periph_inst "gpio_inst" - set gpio_unused 1 - set device [get_device] - - if { [ string range $device 0 3 ] == "5CSE" && [ string range $device 8 9 ] == "19" } { - send_message info "HLGPI is not available for Device $device (484 pins)" - set_parameter_property HLGPI_Enable enabled false - } else { - set_parameter_property HLGPI_Enable enabled true - } - - if { [is_enabled HLGPI_Enable] && [get_parameter_property HLGPI_Enable enabled] } { - for {set hlgpi_pin_index 0} {$hlgpi_pin_index < $hlgpi_count} {incr hlgpi_pin_index} { - # HLGPI connected to gpio[26:13] - set gpio_port_index [ expr {$hlgpi_pin_index + 13} ] - set hlgpi_pin [ lindex $hlgpi_pins $hlgpi_pin_index] - - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - set signal_name "HLGPI${hlgpi_pin_index}" - set pin_location [::pin_mux_db::get_location_of_pin $hlgpi_pin] - set in_port "${periph_inst}:GPIO2_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "" - set oe_port "" - - hps_io::add_pin ${periph_inst} $signal_name input $pin_location $in_port $out_port $oe_port - } - } - - # gpio - funset gpio_port_placement_set ;# set of gpio ports that are being used - set enable_list [get_parameter_value GPIO_Enable] - set wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set periph_inst "gpio_inst" - - # check and set GPIO_Pin_Used_DERIVED parameter - set_parameter_value GPIO_Pin_Used_DERIVED false - - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - set enabled 0 - set enable_value [lindex $enable_list $entry] - if { [string compare $enable_value "Yes" ] == 0 } { - set enabled 1 - } - if {$enabled} { - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists} { - set conflicting_peripheral $pin_to_peripheral($pin) - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripheral '$conflicting_peripheral' and '${gpio_name}' are conflicting." - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $gpio_name - } - - if {[info exists gpio_port_placement_set($gpio_index)]} { - send_message error "Refer to the Peripherals Mux Table for more details. GPIO${gpio_index} cannot be used twice." - set conflict_pin_list($pin) 1 - } else { - set gpio_port_placement_set($gpio_index) 1 - } - - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - lassign [gpio_index_to_gpio_port_index $gpio_index] gpio_group gpio_port_index - set in_port "${periph_inst}:GPIO${gpio_group}_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "${periph_inst}:GPIO${gpio_group}_PORTA_O($gpio_port_index:$gpio_port_index)" - set oe_port "${periph_inst}:GPIO${gpio_group}_PORTA_OE($gpio_port_index:$gpio_port_index)" - - set pin_location [::pin_mux_db::get_location_of_pin $pin] - hps_io::add_pin $periph_inst $gpio_name bidir $pin_location $in_port $out_port $oe_port - - # set GPIO_Pin_Used_DERIVED to true if GPIO pins used - set_parameter_value GPIO_Pin_Used_DERIVED true - } - } - - # loan i/o - set enable_list [get_parameter_value LOANIO_Enable] - set loanio_used 0 - set loanio_count 0 - foreach_loan_io_entry hps_ip_pin_muxing_model\ - entry loanio_index loanio_name pin gplin_used gplin_select\ - { - if {$loanio_count < $loanio_index} { - set loanio_count $loanio_index - } - set enabled 0 - set enable_value [lindex $enable_list $entry] - if { [string compare $enable_value "Yes" ] == 0 } { - set enabled 1 - } - - if {$enabled} { - set entry_exists [info exists pin_to_peripheral($pin)] - if {$entry_exists} { - set conflicting_peripheral $pin_to_peripheral($pin) - send_message error "Refer to the Peripherals Mux Table for more details. The selected peripheral for '$conflicting_peripheral' and '${loanio_name}' are conflicting." - set conflict_pin_list($pin) 1 - } else { - set pin_to_peripheral($pin) $loanio_name - } - - if {[info exists gpio_port_placement_set($loanio_index)]} { - send_message error "Refer to the Peripherals Mux Table for more details. GPIO${loanio_index} cannot be used twice." - set conflict_pin_list($pin) 1 - } else { - set gpio_port_placement_set($loanio_index) 1 - } - - set loanio_used 1 - if {$gpio_unused} { - set atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${periph_inst} $wys_atom_name $atom_location - set gpio_unused 0 - } - - lassign [gpio_index_to_gpio_port_index $loanio_index] gpio_group gpio_port_index - set in_port "${periph_inst}:GPIO${gpio_group}_PORTA_I($gpio_port_index:$gpio_port_index)" - set out_port "${periph_inst}:GPIO${gpio_group}_PORTA_O($gpio_port_index:$gpio_port_index)" - set oe_port "${periph_inst}:GPIO${gpio_group}_PORTA_OE($gpio_port_index:$gpio_port_index)" - - set pin_location [::pin_mux_db::get_location_of_pin $pin] - hps_io::add_pin $periph_inst $loanio_name bidir $pin_location $in_port $out_port $oe_port - - } - } - incr loanio_count ;# count is one greater than the highest index - if $loanio_used { - set wys_atom_name [peripheral_to_wys_atom_name $device_family "LOANIO"] - set location {} - set periph_inst "loan_io_inst" - set iface_name "h2f_loan_io" - set z "h2f_loan_" - fpga_interfaces::add_module_instance ${periph_inst} $wys_atom_name $location - fpga_interfaces::add_interface $iface_name conduit Input - set pin_muxing [get_parameter_value pin_muxing] - fpga_interfaces::add_interface_port $iface_name "${z}in" in Output ${loanio_count} $periph_inst loanio_in - fpga_interfaces::add_interface_port $iface_name "${z}out" out Input ${loanio_count} $periph_inst loanio_out - fpga_interfaces::add_interface_port $iface_name "${z}oe" oe Input ${loanio_count} $periph_inst loanio_oe - - # add loanIO to GPIO atom connection - set loanio_periph_inst "loan_io_inst" - set loanio_iface_name "loanio_gpio" - set loanio_z "loanio_gpio_" - set gpio_periph_inst "gpio_inst" - set gpio_iface_name "gpio_loanio" - set gpio_z "gpio_loanio_" - set gpio_port_size 29 - set start_index 0 - - if {$gpio_unused} { - set gpio_wys_atom_name [peripheral_to_wys_atom_name $device_family "GPIO"] - set gpio_atom_location [locations::get_hps_io_peripheral_location "GPIO"] - hps_io::add_peripheral ${gpio_periph_inst} ${gpio_wys_atom_name} ${gpio_atom_location} - set gpio_unused 0 - } - - fpga_interfaces::add_interface $loanio_iface_name conduit Input "NO_EXPORT" - ::hps_io::internal::add_interface $gpio_iface_name conduit Output "NO_EXPORT" - - for {set i 0} {$i <= 2} {incr i} { - if {[expr ($loanio_count - $start_index)] < $gpio_port_size} { - set gpio_port_size [expr ($loanio_count - $start_index)] - } - set end_index [expr ($start_index + $gpio_port_size - 1)] - - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_i" "loanio${i}_i" Input ${gpio_port_size} - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_oe" "loanio${i}_oe" Output ${gpio_port_size} - fpga_interfaces::add_interface_port $loanio_iface_name "${loanio_z}loanio${i}_o" "loanio${i}_o" Output ${gpio_port_size} - - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_i" "${loanio_periph_inst}:GPIO_IN($end_index:$start_index)" - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_oe" "${loanio_periph_inst}:GPIO_OE($end_index:$start_index)" - fpga_interfaces::set_port_fragments $loanio_iface_name "${loanio_z}loanio${i}_o" "${loanio_periph_inst}:GPIO_OUT($end_index:$start_index)" - - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_i" "loanio${i}_i" Output ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_I" - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_oe" "loanio${i}_oe" Input ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_OE" - ::hps_io::internal::add_interface_port $gpio_iface_name "${gpio_z}loanio${i}_o" "loanio${i}_o" Input ${gpio_port_size} $gpio_periph_inst "LOANIO${i}_O" - - set start_index [expr ($end_index + 1)] - } - } - set conflicts [list] - set pins [list] - foreach_gpio_entry hps_ip_pin_muxing_model\ - entry gpio_index gpio_name pin gplin_used gplin_select\ - { - set entry_exists [info exists conflict_pin_list($pin)] - if {$entry_exists} { - set conflict "Yes" - } else { - set conflict "No" - } - lappend conflicts $conflict - lappend pins $pin - } - set_parameter_value JAVA_CONFLICT_PIN $conflicts - set_parameter_value JAVA_GUI_PIN_LIST $pins -} - -##################################################### -# -# Sets a valid mode for the peripheral when its pin -# muxing option changes. Will try to retain the -# original mode if available. -# -proc on_altered_peripheral_pin_muxing {peripheral_name} { -##################################################### - set mode_param_name "${peripheral_name}_Mode" - set mode_option [get_parameter_value $mode_param_name] - - get_peripheral_parameter_valid_ranges hps_ip_pin_muxing_model $peripheral_name\ - selected_pin_muxing_option pin_muxing_options new_valid_modes - - # filter the label name of the parameter value if exist - if {[lsearch $new_valid_modes $mode_option] == -1} { - regsub ":.*" [lindex $new_valid_modes 0] "" new_mode_option - } else { - set new_mode_option $mode_option - } - set_parameter_value $mode_param_name $new_mode_option - - if {[string match "*EMAC*" $peripheral_name]} { - on_emac_mode_switch_internal $peripheral_name - } -} - -# Adds the pin muxing model argument -proc on_emac_mode_switch_internal {peripheral_name} { - on_emac_mode_switch hps_ip_pin_muxing_model $peripheral_name -} - -proc validate_and_update_ddr {} { - set desired_operational_freq [get_parameter_value DDR_DesiredFreq] - if {$desired_operational_freq < 0.0} { - send_message error "The operational frequency of the DDR Controller cannot be negative." - } else { - send_message warning "The recommended DDR Controller clock frequency and phase shift information is not correct." - - set_parameter_value DDR_PLLC0RecommendedFreq_DERIVED $desired_operational_freq - set_parameter_value DDR_PLLC1RecommendedFreq_DERIVED [expr $desired_operational_freq * 2.0] - set_parameter_value DDR_PLLC2RecommendedFreq_DERIVED $desired_operational_freq - set_parameter_value DDR_PLLC3RecommendedFreq_DERIVED $desired_operational_freq - - set_parameter_value DDR_PLLC0RecommendedPhase_DERIVED 0.0 - set_parameter_value DDR_PLLC1RecommendedPhase_DERIVED 1.0 - set_parameter_value DDR_PLLC2RecommendedPhase_DERIVED 2.0 - set_parameter_value DDR_PLLC3RecommendedPhase_DERIVED 3.0 - } - - for {set index 0} {${index} < 4} {incr index} { - set p_name "DDR_PLLC${index}ActualFreq" - set value [get_parameter_value $p_name] - if {$value < 0.0} { - send_message error "DDR PLL Output C${index} cannot have a negative clock frequency." - } - - set p_name "DDR_PLLC${index}ActualPhase" - set value [get_parameter_value $p_name] - if {$value < 0.0} { - send_message error "DDR PLL Output C${index} cannot have a negative clock phase shift." - } - } -} - - -###################### -##### Elaboration ##### -###################### - -proc elab {logical_view} { - # TODO: add RTL information for each - set device_family [get_parameter_value hps_device_family] - - elab_clocks_resets $device_family - - elab_MPU_EVENTS $device_family - elab_DEBUGAPB $device_family - elab_STM $device_family - elab_CTI $device_family - elab_TPIUFPGA $device_family - elab_GP $device_family - elab_BOOTFROMFPGA $device_family - - if {$logical_view == 0} { - elab_F2S $device_family - elab_LWH2F $device_family - elab_S2F $device_family - elab_F2SDRAM $device_family - - } - - elab_DMA $device_family - elab_INTERRUPTS $device_family $logical_view - - elab_emac_ptp $device_family - - elab_TEST $device_family - - # Handle Special Case EMAC signal... ptp_ref_clk - set emac0_pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] EMAC0] - set emac1_pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] EMAC1] - set emac0_pin_mux_value [get_parameter_value $emac0_pin_mux_param_name] - set emac1_pin_mux_value [get_parameter_value $emac1_pin_mux_param_name] - set emac0_pin_mux_allowed_ranges [get_parameter_property $emac0_pin_mux_param_name allowed_ranges] - set emac1_pin_mux_allowed_ranges [get_parameter_property $emac1_pin_mux_param_name allowed_ranges] - - set emac0_ptp_enabled [expr {[string compare $emac0_pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $emac0_pin_mux_allowed_ranges [FPGA_MUX_VALUE]] != -1}] - set emac1_ptp_enabled [expr {[string compare $emac1_pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $emac1_pin_mux_allowed_ranges [FPGA_MUX_VALUE]] != -1}] - - set emac0_io_enabled [expr {[string compare $emac0_pin_mux_value "HPS I/O Set 0"] == 0 && [lsearch $emac0_pin_mux_allowed_ranges "HPS I/O Set 0"] != -1}] - set emac1_io_enabled [expr {[string compare $emac1_pin_mux_value "HPS I/O Set 0"] == 0 && [lsearch $emac1_pin_mux_allowed_ranges "HPS I/O Set 0"] != -1}] - - set emac0_ptp [get_parameter_value EMAC0_PTP] - set emac1_ptp [get_parameter_value EMAC1_PTP] - - if {$emac0_ptp && $emac0_io_enabled} { - set emac0_ptp_enabled 1 - } - if {$emac1_ptp && $emac1_io_enabled} { - set emac1_ptp_enabled 1 - } - - if {$emac0_ptp_enabled || $emac1_ptp_enabled } { - set instance_name clocks_resets - fpga_interfaces::add_interface emac_ptp_ref_clock clock Input - fpga_interfaces::add_interface_port emac_ptp_ref_clock emac_ptp_ref_clk clk Input 1 $instance_name ptp_ref_clk - } - - # TODO: elab peripherals that mux signals to the fpga - elab_FPGA_Peripheral_Signals $device_family - - set_parameter_value DEVICE_FAMILY [get_parameter_value SYS_INFO_DEVICE_FAMILY] -} - -proc elab_MPU_EVENTS {device_family} { - if [is_enabled MPU_EVENTS_Enable] { - set instance_name mpu_events - set atom_name hps_interface_mpu_event_standby - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "h2f_mpu_events" - set z "h2f_mpu_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}eventi eventi Input 1 $instance_name eventi - fpga_interfaces::add_interface_port $iface_name ${z}evento evento Output 1 $instance_name evento - fpga_interfaces::add_interface_port $iface_name ${z}standbywfe standbywfe Output 2 $instance_name standbywfe - fpga_interfaces::add_interface_port $iface_name ${z}standbywfi standbywfi Output 2 $instance_name standbywfi - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_DEBUGAPB {device_family} { - set instance_name debug_apb - set atom_name hps_interface_dbg_apb - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - if [is_enabled DEBUGAPB_Enable] { - set clock_name "h2f_debug_apb_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name "h2f_dbg_apb_clk" clk Input 1 $instance_name P_CLK - - set reset_name "h2f_debug_apb_reset" - fpga_interfaces::add_interface $reset_name reset Output - fpga_interfaces::add_interface_port $reset_name "h2f_dbg_apb_rst_n" reset_n Output 1 $instance_name P_RESET_N - fpga_interfaces::set_interface_property $reset_name associatedClock $clock_name - - set iface_name "h2f_debug_apb" - set z "h2f_dbg_apb_" - fpga_interfaces::add_interface $iface_name apb master - fpga_interfaces::add_interface_port $iface_name "${z}PADDR" paddr Output 18 $instance_name P_ADDR - fpga_interfaces::add_interface_port $iface_name "${z}PADDR31" paddr31 Output 1 $instance_name P_ADDR_31 - fpga_interfaces::add_interface_port $iface_name "${z}PENABLE" penable Output 1 $instance_name P_ENABLE - fpga_interfaces::add_interface_port $iface_name "${z}PRDATA" prdata Input 32 $instance_name P_RDATA - fpga_interfaces::add_interface_port $iface_name "${z}PREADY" pready Input 1 $instance_name P_READY - fpga_interfaces::add_interface_port $iface_name "${z}PSEL" psel Output 1 $instance_name P_SEL - fpga_interfaces::add_interface_port $iface_name "${z}PSLVERR" pslverr Input 1 $instance_name P_SLV_ERR - fpga_interfaces::add_interface_port $iface_name "${z}PWDATA" pwdata Output 32 $instance_name P_WDATA - fpga_interfaces::add_interface_port $iface_name "${z}PWRITE" pwrite Output 1 $instance_name P_WRITE - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset $reset_name - - set iface_name "h2f_debug_apb_sideband" - set z "h2f_dbg_apb_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name "${z}PCLKEN" pclken Input 1 $instance_name P_CLK_EN - fpga_interfaces::add_interface_port $iface_name "${z}DBG_APB_DISABLE" dbg_apb_disable Input 1 $instance_name DBG_APB_DISABLE - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset $reset_name - - } else { - # Tie low when FPGA debug apb not being used - fpga_interfaces::set_instance_port_termination ${instance_name} "P_CLK_EN" 1 0 0:0 0 - fpga_interfaces::set_instance_port_termination ${instance_name} "DBG_APB_DISABLE" 1 0 0:0 0 - } -} - -proc elab_STM {device_family} { - if [is_enabled STM_Enable] { - set instance_name stm_event - set atom_name hps_interface_stm_event - set location [locations::get_fpga_location $instance_name $atom_name] - - fpga_interfaces::add_interface f2h_stm_hw_events conduit Input - fpga_interfaces::add_interface_port f2h_stm_hw_events f2h_stm_hwevents stm_hwevents Input 28 $instance_name stm_event - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_CTI {device_family} { - set instance_name cross_trigger_interface - set atom_name hps_interface_cross_trigger - set location [locations::get_fpga_location $instance_name $atom_name] - - if [is_enabled CTI_Enable] { - set iface_name "h2f_cti" - set z "h2f_cti_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}trig_in trig_in Input 8 $instance_name trig_in - fpga_interfaces::add_interface_port $iface_name ${z}trig_in_ack trig_in_ack Output 8 $instance_name trig_inack - fpga_interfaces::add_interface_port $iface_name ${z}trig_out trig_out Output 8 $instance_name trig_out - fpga_interfaces::add_interface_port $iface_name ${z}trig_out_ack trig_out_ack Input 8 $instance_name trig_outack - # case:105603 hide asicctl output signal - # fpga_interfaces::add_interface_port $iface_name ${z}asicctl asicctl Output 8 $instance_name asicctl - fpga_interfaces::add_interface_port $iface_name ${z}fpga_clk_en fpga_clk_en Input 1 $instance_name clk_en - fpga_interfaces::set_interface_property $iface_name associatedClock h2f_cti_clock - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - - fpga_interfaces::add_interface h2f_cti_clock clock Input - fpga_interfaces::add_interface_port h2f_cti_clock h2f_cti_clk clk Input 1 $instance_name clk - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_TPIUFPGA {device_family} { - set instance_name tpiu - set atom_name hps_interface_tpiu_trace - set location [locations::get_fpga_location $instance_name $atom_name] - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - if { [string compare [get_parameter_value TPIUFPGA_Enable] "true" ] == 0 } { - set_parameter_property TPIUFPGA_alt enabled true - set iface_name "h2f_tpiu" - set z "h2f_tpiu_" - fpga_interfaces::add_interface $iface_name conduit input - fpga_interfaces::add_interface_port $iface_name ${z}clk_ctl clk_ctl Input 1 $instance_name traceclk_ctl - fpga_interfaces::add_interface_port $iface_name ${z}data data Output 32 $instance_name trace_data - - # case 245159 - if {[string compare [get_parameter_value TPIUFPGA_alt] "true" ] == 0} { - fpga_interfaces::add_interface_port $iface_name ${z}clkin clkin Input 1 $instance_name traceclkin - } else { - set iface_name "h2f_tpiu_clock_in" - fpga_interfaces::add_interface $iface_name clock input - fpga_interfaces::add_interface_port $iface_name ${z}clk_in clk Input 1 $instance_name traceclkin - } - - set clock_in_rate [get_parameter_value H2F_TPIU_CLOCK_IN_FREQ] - set clock_rate [expr {$clock_in_rate / 2}] - set iface_name "h2f_tpiu_clock" - fpga_interfaces::add_interface $iface_name clock output - fpga_interfaces::add_interface_port $iface_name ${z}clk clk Output 1 $instance_name traceclk - fpga_interfaces::set_interface_property $iface_name clockRateKnown true - fpga_interfaces::set_interface_property $iface_name clockRate $clock_rate - - add_clock_constraint_if_valid $clock_rate "*|fpga_interfaces|${instance_name}|traceclk" - - } else { - set_parameter_property TPIUFPGA_alt enabled false - fpga_interfaces::set_instance_port_termination ${instance_name} "traceclk_ctl" 1 1 0:0 1 - } -} - -proc elab_GP {device_family} { - if [is_enabled GP_Enable] { - set instance_name h2f_gp - set atom_name hps_interface_mpu_general_purpose - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "h2f_gp" - set z "h2f_gp_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name ${z}in gp_in Input 32 $instance_name gp_in - fpga_interfaces::add_interface_port $iface_name ${z}out gp_out Output 32 $instance_name gp_out - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_BOOTFROMFPGA {device_family} { - set instance_name boot_from_fpga - set atom_name hps_interface_boot_from_fpga - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set bsel_en [expr { [string compare [get_parameter_value BSEL_EN] "true" ] == 0 } ] - set bsel [get_parameter_value BSEL] - set csel_en [expr { [string compare [get_parameter_value CSEL_EN] "true" ] == 0 } ] - set csel [get_parameter_value CSEL] - set boot_from_fpga_enable [expr { [string compare [get_parameter_value BOOTFROMFPGA_Enable] "true" ] == 0 } ] - set ini_string [get_parameter_value quartus_ini_hps_ip_enable_bsel_csel] - set ini_enabled [expr { [string compare $ini_string "true" ] == 0 } ] - - # force disable bsel/csel by default - if {!$ini_enabled} { - set bsel_en 0 - set bsel 1 - set csel_en 0 - set csel 1 - } - - # when INI enabled, the controls should appear in the GUI - foreach parameter {BSEL BSEL_EN CSEL CSEL_EN} { - set_parameter_property $parameter visible $ini_string - set_parameter_property $parameter enabled $ini_string - } - - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel" 3 0 2:0 $bsel - fpga_interfaces::set_instance_port_termination ${instance_name} "csel" 2 0 1:0 $csel - - if {$bsel_en} { - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel_en" 1 0 0:0 1 - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "bsel_en" 1 0 0:0 0 - } - - if {$csel_en} { - fpga_interfaces::set_instance_port_termination ${instance_name} "csel_en" 1 0 0:0 1 - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "csel_en" 1 0 0:0 0 - } - - if {$boot_from_fpga_enable} { - set iface_name "f2h_boot_from_fpga" - set z "f2h_boot_from_fpga_" - fpga_interfaces::add_interface $iface_name conduit Input - fpga_interfaces::add_interface_port $iface_name "${z}ready" boot_from_fpga_ready Input 1 $instance_name boot_from_fpga_ready - fpga_interfaces::add_interface_port $iface_name "${z}on_failure" boot_from_fpga_on_failure Input 1 $instance_name boot_from_fpga_on_failure - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "boot_from_fpga_ready" 1 0 0:0 0 - fpga_interfaces::set_instance_port_termination ${instance_name} "boot_from_fpga_on_failure" 1 0 0:0 0 - } - - if {$boot_from_fpga_enable} { - send_message info "Ensure that valid Cortex A9 boot code is available to the HPS system when enabling boot from FPGA and h2f_axi_master interface is connecting to slave component start at address 0x0." - } - - if {$bsel_en && $bsel == 1 && !$boot_from_fpga_enable} { - send_message warning "Boot from FPGA ready must be enabled to correctly boot from the FPGA." - } -} - - -proc elab_F2S {device_family} { - set instance_name fpga2hps - set atom_name hps_interface_fpga2hps - set location [locations::get_fpga_location $instance_name $atom_name] - set termination_value 3 - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set addr_width 32 - set width [get_parameter_value F2S_Width] - if {$width > 0} { - set data_width 32 - set strb_width 4 - set termination_value 0 - if {$width == 2} { - set data_width 64 - set strb_width 8 - set termination_value 1 - } elseif {$width == 3} { - set data_width 128 - set strb_width 16 - set termination_value 2 - } - - set clock_name "f2h_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name f2h_axi_clk clk Input 1 $instance_name clk - - set iface_name "f2h_axi_slave" - set z "f2h_" - - fpga_interfaces::add_interface $iface_name axi slave - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readAcceptanceCapability 8 - fpga_interfaces::set_interface_property $iface_name writeAcceptanceCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedAcceptanceCapability 16 - fpga_interfaces::set_interface_property $iface_name readDataReorderingDepth 16 - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Input 8 $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Input $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Input 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Input 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Input 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Input 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Input 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Input 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Input 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Output 1 $instance_name awready - fpga_interfaces::add_interface_port $iface_name ${z}AWUSER awuser Input 5 $instance_name awuser - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Input 8 $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Input $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Input $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Input 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Input 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Output 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Output 8 $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Output 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Output 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Input 1 $instance_name bready - - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Input 8 $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Input $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Input 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Input 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Input 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Input 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Input 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Input 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Input 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Output 1 $instance_name arready - fpga_interfaces::add_interface_port $iface_name ${z}ARUSER aruser Input 5 $instance_name aruser - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Output 8 $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Output $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Output 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Output 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Output 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Input 1 $instance_name rready - } - fpga_interfaces::set_instance_port_termination ${instance_name} "port_size_config" 2 0 1:0 $termination_value -} - -proc elab_S2F {device_family} { - set instance_name hps2fpga - set atom_name hps_interface_hps2fpga - set location [locations::get_fpga_location $instance_name $atom_name] - set termination_value 3 - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set addr_width 30 - set id_width 12 - set width [get_parameter_value S2F_Width] - if {$width > 0} { - set data_width 32 - set strb_width 4 - set termination_value 0 - - if {$width == 2} { - set data_width 64 - set strb_width 8 - set termination_value 1 - - } elseif {$width == 3} { - set data_width 128 - set strb_width 16 - set termination_value 2 - } - - set clock_name "h2f_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name h2f_axi_clk clk Input 1 $instance_name clk - - set iface_name "h2f_axi_master" - set z "h2f_" - - fpga_interfaces::add_interface $iface_name axi master - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name writeIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedIssuingCapability 16 - -# set svd_path [file join $::env(QUARTUS_ROOTDIR) .. ip altera hps altera_hps golden_ref_design_CMSIS_1_1_to_arm_v2.svd] -# send_message info "REMOVE! SVD_PATH = $svd_path" -# fpga_interfaces::set_interface_property $iface_name CMSIS_SVD_FILE $svd_path -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_GROUP hps -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_OFFSET [expr {0xC0000000}] - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - fpga_interfaces::set_interface_meta_property $iface_name id_width $id_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Output $id_width $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Output $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Output 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Output 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Output 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Output 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Output 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Output 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Output 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Input 1 $instance_name awready - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Output $id_width $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Output $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Output $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Output 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Output 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Input 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Input $id_width $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Input 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Input 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Output 1 $instance_name bready - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Output $id_width $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Output $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Output 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Output 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Output 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Output 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Output 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Output 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Output 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Input 1 $instance_name arready - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Input $id_width $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Input $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Input 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Input 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Input 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Output 1 $instance_name rready - - } - fpga_interfaces::set_instance_port_termination ${instance_name} "port_size_config" 2 0 1:0 $termination_value -} - -proc elab_LWH2F {device_family} { - set instance_name hps2fpga_light_weight - set atom_name hps_interface_hps2fpga_light_weight - set location [locations::get_fpga_location $instance_name $atom_name] - - if [is_enabled LWH2F_Enable] { - set addr_width 21 - set data_width 32 - set strb_width 4 - set id_width 12 - set clock_name "h2f_lw_axi_clock" - fpga_interfaces::add_interface $clock_name clock Input - fpga_interfaces::add_interface_port $clock_name h2f_lw_axi_clk clk Input 1 $instance_name clk - - set iface_name "h2f_lw_axi_master" - set z "h2f_lw_" - fpga_interfaces::add_interface $iface_name axi master -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_GROUP hps -# fpga_interfaces::set_interface_property $iface_name SVD_ADDRESS_OFFSET [expr {0xFC000000}] - fpga_interfaces::set_interface_property $iface_name associatedClock $clock_name - fpga_interfaces::set_interface_property $iface_name associatedReset h2f_reset - fpga_interfaces::set_interface_property $iface_name readIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name writeIssuingCapability 8 - fpga_interfaces::set_interface_property $iface_name combinedIssuingCapability 16 - fpga_interfaces::set_interface_meta_property $iface_name data_width $data_width - fpga_interfaces::set_interface_meta_property $iface_name address_width $addr_width - fpga_interfaces::set_interface_meta_property $iface_name id_width $id_width - - fpga_interfaces::add_interface_port $iface_name ${z}AWID awid Output $id_width $instance_name awid - fpga_interfaces::add_interface_port $iface_name ${z}AWADDR awaddr Output $addr_width $instance_name awaddr - fpga_interfaces::add_interface_port $iface_name ${z}AWLEN awlen Output 4 $instance_name awlen - fpga_interfaces::add_interface_port $iface_name ${z}AWSIZE awsize Output 3 $instance_name awsize - fpga_interfaces::add_interface_port $iface_name ${z}AWBURST awburst Output 2 $instance_name awburst - fpga_interfaces::add_interface_port $iface_name ${z}AWLOCK awlock Output 2 $instance_name awlock - fpga_interfaces::add_interface_port $iface_name ${z}AWCACHE awcache Output 4 $instance_name awcache - fpga_interfaces::add_interface_port $iface_name ${z}AWPROT awprot Output 3 $instance_name awprot - fpga_interfaces::add_interface_port $iface_name ${z}AWVALID awvalid Output 1 $instance_name awvalid - fpga_interfaces::add_interface_port $iface_name ${z}AWREADY awready Input 1 $instance_name awready - - fpga_interfaces::add_interface_port $iface_name ${z}WID wid Output $id_width $instance_name wid - fpga_interfaces::add_interface_port $iface_name ${z}WDATA wdata Output $data_width $instance_name wdata - fpga_interfaces::add_interface_port $iface_name ${z}WSTRB wstrb Output $strb_width $instance_name wstrb - fpga_interfaces::add_interface_port $iface_name ${z}WLAST wlast Output 1 $instance_name wlast - fpga_interfaces::add_interface_port $iface_name ${z}WVALID wvalid Output 1 $instance_name wvalid - fpga_interfaces::add_interface_port $iface_name ${z}WREADY wready Input 1 $instance_name wready - - fpga_interfaces::add_interface_port $iface_name ${z}BID bid Input $id_width $instance_name bid - fpga_interfaces::add_interface_port $iface_name ${z}BRESP bresp Input 2 $instance_name bresp - fpga_interfaces::add_interface_port $iface_name ${z}BVALID bvalid Input 1 $instance_name bvalid - fpga_interfaces::add_interface_port $iface_name ${z}BREADY bready Output 1 $instance_name bready - - fpga_interfaces::add_interface_port $iface_name ${z}ARID arid Output $id_width $instance_name arid - fpga_interfaces::add_interface_port $iface_name ${z}ARADDR araddr Output $addr_width $instance_name araddr - fpga_interfaces::add_interface_port $iface_name ${z}ARLEN arlen Output 4 $instance_name arlen - fpga_interfaces::add_interface_port $iface_name ${z}ARSIZE arsize Output 3 $instance_name arsize - fpga_interfaces::add_interface_port $iface_name ${z}ARBURST arburst Output 2 $instance_name arburst - fpga_interfaces::add_interface_port $iface_name ${z}ARLOCK arlock Output 2 $instance_name arlock - fpga_interfaces::add_interface_port $iface_name ${z}ARCACHE arcache Output 4 $instance_name arcache - fpga_interfaces::add_interface_port $iface_name ${z}ARPROT arprot Output 3 $instance_name arprot - fpga_interfaces::add_interface_port $iface_name ${z}ARVALID arvalid Output 1 $instance_name arvalid - fpga_interfaces::add_interface_port $iface_name ${z}ARREADY arready Input 1 $instance_name arready - - fpga_interfaces::add_interface_port $iface_name ${z}RID rid Input $id_width $instance_name rid - fpga_interfaces::add_interface_port $iface_name ${z}RDATA rdata Input $data_width $instance_name rdata - fpga_interfaces::add_interface_port $iface_name ${z}RRESP rresp Input 2 $instance_name rresp - fpga_interfaces::add_interface_port $iface_name ${z}RLAST rlast Input 1 $instance_name rlast - fpga_interfaces::add_interface_port $iface_name ${z}RVALID rvalid Input 1 $instance_name rvalid - fpga_interfaces::add_interface_port $iface_name ${z}RREADY rready Output 1 $instance_name rready - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_F2SDRAM {device_family} { - f2sdram::init_registers - - set instance_name f2sdram - set atom_name hps_interface_fpga2sdram - set location [locations::get_fpga_location $instance_name $atom_name] - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - set use_fast_sim_model [expr { [string compare [get_parameter_value quartus_ini_hps_ip_fast_f2sdram_sim_model] "true" ] == 0 }] - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - #newly added - set width_list [get_parameter_value F2SDRAM_Width] - set rows [llength $width_list] - if {$rows > 0} { - # TODO: move outside of 'if' once registers are rendered - - - set type_list [get_parameter_value F2SDRAM_Type] - for {set i 0} {${i} < $rows} {incr i} { - set width [lindex $width_list $i] - set type_choice [lindex $type_list $i] - - set type "axi" - set type_id 0 - if { [string compare $type_choice [F2HSDRAM_AVM]] == 0 } { - set type "avalon" - set type_id 1 - } elseif { [string compare $type_choice [F2HSDRAM_AVM_WRITEONLY]] == 0 } { - set type "avalon" - set type_id 2 - } elseif { [string compare $type_choice [F2HSDRAM_AVM_READONLY]] == 0 } { - set type "avalon" - set type_id 3 - } - - set sim_is_synth [expr !$use_fast_sim_model] - - # To make sure bonding_out_signal only being added once even thought there are more than one f2sdram - if {$i == 0 } { - set bonding_out_signal [expr { [string compare [get_parameter_value BONDING_OUT_ENABLED] "true"] == 0} && {[string compare [get_parameter_value quartus_ini_hps_ip_f2sdram_bonding_out] "true"] == 0}] - } else { - set bonding_out_signal 0 - } - - f2sdram::add_port registers $i $type_id $width $instance_name $sim_is_synth $bonding_out_signal - } - f2sdram::add_sdc $use_fast_sim_model - fpga_interfaces::set_property IMPLEMENT_F2SDRAM_MEMORY_BACKED_SIM $use_fast_sim_model - - } - # write the registers out - f2sdram::render_registers registers $instance_name -} - -proc elab_clocks_resets {device_family} { - set instance_name clocks_resets - set atom_name hps_interface_clocks_resets - set location [locations::get_fpga_location $instance_name $atom_name] - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - - fpga_interfaces::add_interface h2f_reset reset Output - fpga_interfaces::add_interface_port h2f_reset h2f_rst_n reset_n Output 1 $instance_name - fpga_interfaces::set_interface_property h2f_reset synchronousEdges none - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks none - - if [is_enabled S2FCLK_COLDRST_Enable] { - fpga_interfaces::add_interface h2f_cold_reset reset Output - fpga_interfaces::add_interface_port h2f_cold_reset h2f_cold_rst_n reset_n Output 1 $instance_name - fpga_interfaces::set_interface_property h2f_cold_reset synchronousEdges none - fpga_interfaces::set_interface_property h2f_cold_reset associatedResetSinks none - } - - if [is_enabled F2SCLK_COLDRST_Enable] { - fpga_interfaces::add_interface f2h_cold_reset_req reset Input - fpga_interfaces::add_interface_port f2h_cold_reset_req f2h_cold_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_cold_reset_req synchronousEdges none - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks f2h_cold_reset_req - if [is_enabled S2FCLK_COLDRST_Enable] { - fpga_interfaces::set_interface_property h2f_cold_reset associatedResetSinks f2h_cold_reset_req - } - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_cold_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled S2FCLK_PENDINGRST_Enable] { - fpga_interfaces::add_interface h2f_warm_reset_handshake conduit Output - fpga_interfaces::add_interface_port h2f_warm_reset_handshake h2f_pending_rst_req_n h2f_pending_rst_req_n Output 1 $instance_name - fpga_interfaces::add_interface_port h2f_warm_reset_handshake f2h_pending_rst_ack_n f2h_pending_rst_ack_n Input 1 $instance_name f2h_pending_rst_ack - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_pending_rst_ack" 1 1 0:0 1 - } - - if [is_enabled F2SCLK_DBGRST_Enable] { - fpga_interfaces::add_interface f2h_debug_reset_req reset Input - fpga_interfaces::add_interface_port f2h_debug_reset_req f2h_dbg_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_debug_reset_req synchronousEdges none - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_dbg_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled F2SCLK_WARMRST_Enable] { - fpga_interfaces::add_interface f2h_warm_reset_req reset Input - fpga_interfaces::add_interface_port f2h_warm_reset_req f2h_warm_rst_req_n reset_n Input 1 $instance_name - fpga_interfaces::set_interface_property f2h_warm_reset_req synchronousEdges none - - if [is_enabled F2SCLK_COLDRST_Enable] { - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks {f2h_warm_reset_req f2h_cold_reset_req} - } else { - fpga_interfaces::set_interface_property h2f_reset associatedResetSinks {f2h_warm_reset_req} - } - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_warm_rst_req_n" 1 1 0:0 1 - } - - if [is_enabled S2FCLK_USER0CLK_Enable] { - fpga_interfaces::add_interface h2f_user0_clock clock Output - fpga_interfaces::add_interface_port h2f_user0_clock h2f_user0_clk clk Output 1 $instance_name - set frequency [get_parameter_value S2FCLK_USER0CLK_FREQ] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property h2f_user0_clock clockRateKnown true - fpga_interfaces::set_interface_property h2f_user0_clock clockRate $frequency - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|h2f_user0_clk" - } - - if [is_enabled S2FCLK_USER1CLK_Enable] { - fpga_interfaces::add_interface h2f_user1_clock clock Output - fpga_interfaces::add_interface_port h2f_user1_clock h2f_user1_clk clk Output 1 $instance_name - set frequency [get_parameter_value S2FCLK_USER1CLK_FREQ] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property h2f_user1_clock clockRateKnown true - fpga_interfaces::set_interface_property h2f_user1_clock clockRate $frequency - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|h2f_user1_clk" - } - - set_parameter_property S2FCLK_USER2CLK enabled false - - if [is_enabled F2SCLK_PERIPHCLK_Enable] { - fpga_interfaces::add_interface f2h_periph_ref_clock clock Input - fpga_interfaces::add_interface_port f2h_periph_ref_clock f2h_periph_ref_clk clk Input 1 $instance_name - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_periph_ref_clk" 1 0 - } - - - if [is_enabled F2SCLK_SDRAMCLK_Enable] { - fpga_interfaces::add_interface f2h_sdram_ref_clock clock Input - fpga_interfaces::add_interface_port f2h_sdram_ref_clock f2h_sdram_ref_clk clk Input 1 $instance_name - } else { - fpga_interfaces::set_instance_port_termination ${instance_name} "f2h_sdram_ref_clk" 1 0 - } -} - -# Elaborate peripheral request interfaces for the fpga and -# the clk/reset per pair -# TODO: Make sure the DMA RTL contains the wrapper -proc elab_DMA {device_family} { - set instance_name dma - set atom_name hps_interface_dma - set location [locations::get_fpga_location $instance_name $atom_name] - - set can_message 0 - set available_list [get_parameter_value DMA_Enable] - if {[llength $available_list] > 0} { - set dma_used 0 - set periph_id 0 - foreach entry $available_list { - if {[string compare $entry "Yes" ] == 0} { - elab_DMA_entry $periph_id $instance_name - set dma_used 1 - if {$periph_id >= 4} { - set can_message 1 - } - } - incr periph_id - } - if $dma_used { - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - if $can_message { - send_message info "DMA Peripheral Request Interfaces 4-7 may be consumed by an HPS CAN Controller" - } - } -} - -proc elab_DMA_make_conduit_name {periph_id} { - return "f2h_dma_req${periph_id}" -} - -proc elab_DMA_entry {periph_id instance_name} { - set iname [elab_DMA_make_conduit_name $periph_id] - set atom_signal_prefix "channel${periph_id}" - fpga_interfaces::add_interface $iname conduit Output - fpga_interfaces::add_interface_port $iname "${iname}_req" "dma_req" Input 1 $instance_name ${atom_signal_prefix}_req - fpga_interfaces::add_interface_port $iname "${iname}_single" "dma_single" Input 1 $instance_name ${atom_signal_prefix}_single - fpga_interfaces::add_interface_port $iname "${iname}_ack" "dma_ack" Output 1 $instance_name ${atom_signal_prefix}_xx_ack -} - - -proc elab_emac_ptp {device_family} { - # added for case http://fogbugz.altera.com/default.asp?307450 - for {set i 0} {$i < 2} {incr i} { - set emac_fpga_enabled false - set emac_io_enabled false - - set emac_pin_mux_value [get_parameter_value EMAC${i}_PinMuxing] - set emac_ptp [get_parameter_value EMAC${i}_PTP] - - if {[string compare $emac_pin_mux_value [FPGA_MUX_VALUE]] == 0} { - set emac_fpga_enabled true - } - if {[string compare $emac_pin_mux_value "HPS I/O Set 0"] == 0} { - set emac_io_enabled true - } - - set_parameter_property EMAC${i}_PTP enabled $emac_io_enabled - - if {$emac_io_enabled && $emac_ptp } { - set instance_name peripheral_emac${i} - set atom_name hps_interface_peripheral_emac - set wys_atom_name arriav_hps_interface_peripheral_emac - set location [locations::get_fpga_location $instance_name $atom_name] - - set iface_name "emac${i}" - - fpga_interfaces::add_interface $iface_name conduit input - fpga_interfaces::add_interface_port $iface_name emac${i}_ptp_aux_ts_trig_i ptp_aux_ts_trig_i Input 1 $instance_name ptp_aux_ts_trig_i - fpga_interfaces::add_interface_port $iface_name emac${i}_ptp_pps_o ptp_pps_o Output 1 $instance_name ptp_pps_o - - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - - } -} - -proc elab_INTERRUPTS {device_family logical_view} { - set instance_name interrupts - set atom_name hps_interface_interrupts - set location [locations::get_fpga_location $instance_name $atom_name] - set any_interrupt_enabled 0 - - ##### F2H ##### - if [is_enabled F2SINTERRUPT_Enable] { - set any_interrupt_enabled 1 - set iname "f2h_irq" - set pname "f2h_irq" - if { $logical_view == 0 } { - fpga_interfaces::add_interface "${iname}0" interrupt receiver - fpga_interfaces::add_interface_port "${iname}0" "${pname}_p0" irq Input 32 - fpga_interfaces::set_port_fragments "${iname}0" "${pname}_p0" "${instance_name}:irq(31:0)" - - fpga_interfaces::add_interface "${iname}1" interrupt receiver - fpga_interfaces::add_interface_port "${iname}1" "${pname}_p1" irq Input 32 - fpga_interfaces::set_port_fragments "${iname}1" "${pname}_p1" "${instance_name}:irq(63:32)" - } - } - - ##### H2F ##### - load_h2f_interrupt_table\ - functions_by_group width_by_function inverted_by_function - - set interrupt_groups [list_h2f_interrupt_groups] - foreach group $interrupt_groups { - set parameter "S2FINTERRUPT_${group}_Enable" - set enabled [is_enabled $parameter] - - if {!$enabled} { - continue - } - set any_interrupt_enabled 1 - - foreach function $functions_by_group($group) { - set width 1 - if {[info exists width_by_function($function)]} { - set width $width_by_function($function) - } - - set suffix "" - set inverted [info exists inverted_by_function($function)] - if {$inverted} { - set suffix "_n" - } - - #skip fpga_interfaces interrupt declaration for uart - if { ($logical_view == 1) && ( - $function == "uart0" || - $function == "uart1" )} { - continue - } - - set prefix "h2f_${function}_" - set interface "${prefix}interrupt" - set port "${prefix}irq" - - if {$width > 1} { ;# for buses, use index in interface/port names - for {set i 0} {$i < $width} {incr i} { - set indexed_interface "${interface}${i}" - set indexed_port "${port}${i}${suffix}" - fpga_interfaces::add_interface\ - $indexed_interface interrupt sender - fpga_interfaces::add_interface_port\ - $indexed_interface $indexed_port irq Output 1\ - $instance_name $indexed_port - } - } else { - set port "$port${suffix}" - fpga_interfaces::add_interface\ - $interface interrupt sender - fpga_interfaces::add_interface_port\ - $interface $port irq Output 1 $instance_name $port - } - } - } - - if {$any_interrupt_enabled} { - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -proc elab_TEST {device_family} { - set parameter_enabled [expr {[string compare [get_parameter_value TEST_Enable] "true" ] == 0}] - set ini_enabled [expr {[string compare [get_parameter_value quartus_ini_hps_ip_enable_test_interface] "true" ] == 0}] - - if {$parameter_enabled && $ini_enabled} { - set instance_name test_interface - set atom_name hps_interface_test - set location [locations::get_fpga_location $instance_name $atom_name] - - set iname "test" - set z "test_" - - set data [get_parameter_value test_iface_definition] - - fpga_interfaces::add_interface $iname conduit input - foreach {port width dir} $data { - fpga_interfaces::add_interface_port $iname "${z}${port}" $port $dir $width $instance_name $port - } - - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } -} - -# TODO: Mode usage data -proc elab_FPGA_Peripheral_Signals {device_family} { - # disable and hide all parameters related to fpga outputs - set emac0_fpga [get_parameter_value quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface] - set lssis_fpga [get_parameter_value quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces] - set all_fpga "true" - - set peripherals [list_peripheral_names] - foreach peripheral $peripherals { - if { [string compare $peripheral "SDIO" ] == 0 } { - continue - } - set visible false - if {[string compare $all_fpga "true" ] == 0} { - set visible true - } elseif {[string compare $emac0_fpga "true" ] == 0 && [string compare -nocase $peripheral "emac0"] == 0} { - set visible true - } elseif {[string compare $lssis_fpga "true" ] == 0 && [is_peripheral_low_speed_serial_interface $peripheral_name]} { - set visible true - } - if {[string compare -nocase $peripheral "emac0" ] == 0 || [string compare -nocase $peripheral "emac1" ] == 0} { - set visible true - } - set clocks [get_peripheral_fpga_output_clocks $peripheral] - foreach clock $clocks { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $clock] - set_parameter_property $parameter enabled false - set_parameter_property $parameter visible $visible - set clock_output_set($clock) 1 - } - - set clocks [get_peripheral_fpga_input_clocks $peripheral] - foreach clock $clocks { - set clock_input_set($clock) 1 - } - } - - array set fpga_ifaces [get_parameter_value DB_periph_ifaces] - array set iface_ports [get_parameter_value DB_iface_ports] - array set port_pins [get_parameter_value DB_port_pins] - foreach peripheral_name $fpga_ifaces([ORDERED_NAMES]) { ;# Peripherals - set pin_mux_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral_name] - set pin_mux_value [get_parameter_value $pin_mux_param_name] - set allowed_ranges [get_parameter_property $pin_mux_param_name allowed_ranges] - - if {[string compare $pin_mux_value [FPGA_MUX_VALUE]] == 0 && [lsearch $allowed_ranges [FPGA_MUX_VALUE]] != -1} { - funset peripheral - array set peripheral $fpga_ifaces($peripheral_name) - funset interfaces - array set interfaces $peripheral(interfaces) - - set instance_name [invent_peripheral_instance_name $peripheral_name] - - foreach interface_name $interfaces([ORDERED_NAMES]) { ;# Interfaces - funset interface - array set interface $interfaces($interface_name) - fpga_interfaces::add_interface $interface_name $interface(type) $interface(direction) - foreach {property_key property_value} $interface(properties) { - fpga_interfaces::set_interface_property $interface_name $property_key $property_value - } - #send_message info "NEA: peripheral_name $peripheral_name interface_name $interface_name " - - if { [string match "EMAC?" $peripheral_name] && [string match "*x_reset" $interface_name ] } { - fpga_interfaces::set_interface_property $interface_name associatedResetSinks none - } - - foreach {meta_property} [array names interface] { - # Meta Property if leading with an @ - if {[string compare [string index ${meta_property} 0] "@"] == 0} { - fpga_interfaces::set_interface_meta_property $interface_name [string replace ${meta_property} 0 0] $interface($meta_property) - } - } - - set once_per_clock 1 - funset ports - array set ports $iface_ports($interface_name) - foreach port_name $ports([ORDERED_NAMES]) { ;# Ports - funset port - array set port $ports($port_name) - - # TODO: determine width based on pins available via mode - set width [calculate_port_width $port_pins($port_name)] - - fpga_interfaces::add_interface_port $interface_name $port_name $port(role) $port(direction) $width $instance_name $port(atom_signal_name) - - set frequency 0 - # enable and show clock frequency parameters for outputs - if {[info exists clock_output_set($interface_name)]} { - set parameter [form_peripheral_fpga_output_clock_frequency_parameter $interface_name] - set_parameter_property $parameter enabled true - set frequency [get_parameter_value $parameter] - set frequency [expr {$frequency * [MHZ_TO_HZ]}] - fpga_interfaces::set_interface_property $interface_name clockRateKnown true - fpga_interfaces::set_interface_property $interface_name clockRate $frequency - } - - if {[string compare -nocase $interface(type) "clock"] == 0 && $once_per_clock} { - set once_per_clock 0 - add_clock_constraint_if_valid $frequency "*|fpga_interfaces|${instance_name}|[string tolower $port(atom_signal_name)]" - } - } - } - - # device-specific atom - set atom_name $peripheral(atom_name) - set wys_atom_name [generic_atom_to_wys_atom $device_family $atom_name] - set location [locations::get_fpga_location $peripheral_name $atom_name] - - fpga_interfaces::add_module_instance $instance_name $wys_atom_name $location - } - } -} - -# derives the WYS (device family-specific) atom name from the generic one -proc generic_atom_to_wys_atom {device_family atom_name} { - # TODO: base this on a table of data instead of on code - set result "" - if {[check_device_family_equivalence $device_family CYCLONEV]} { - set result "cyclonev_${atom_name}" - } elseif {[check_device_family_equivalence $device_family ARRIAV]} { - set result "arriav_${atom_name}" - } - return $result -} - -# invents an instance name from the peripheral's name -# assumes that the instance name is the same across a peripheral -proc invent_peripheral_instance_name {peripheral_name} { - return "peripheral_[string tolower $peripheral_name]" -} - -# TODO: do width calculation at db load time so we don't do it every elaboration! -# then make it accessible by a mode to width array for every peripheral with fpga periph interface -# TODO: also validate the static data, checking if the mode signals make sense aka only contiguous, 0-indexed mappings -proc calculate_port_width {pin_array_string} { - array set pins $pin_array_string - # TODO: -do we need to be able to support ports that don't start with pins at 0? - # -e.g. pins D0-D7 are indexed 0-7. if want D4-D7, can we do indexes 4-7? - # -for now, no! - set bit_index 0 - while {[info exists pins($bit_index)]} { - incr bit_index - } - return $bit_index -} - -proc pin_to_bank {pin} { - set io_index [string first "IO" $pin] - return [string range $pin 0 [expr {$io_index - 1}]] -} - -proc sort_pins {pins} { - set pin_suffixes [list] - foreach pin $pins { - set io_index [string first "IO" $pin] - set suffix_start [expr {$io_index + 2}] - set length [string length $pin] - set suffix [string range $pin $suffix_start [expr {$length - 1}]] - lappend pin_suffixes $suffix - } - set result [list] - set indices [lsort-indices -increasing -integer $pin_suffixes] - foreach index $indices { - lappend result [lindex $pins $index] - } - return $result -} - -proc set_peripheral_pin_muxing_description {peripheral_name pin_muxing_description mode_description} { - set parameter "[string toupper $peripheral_name]_PinMuxing" - set_display_item_property $parameter DESCRIPTION $pin_muxing_description - - set parameter "[string toupper $peripheral_name]_Mode" - set_display_item_property $parameter DESCRIPTION $mode_description -} - -# Expects same set of keys between both parameters -proc create_pin_muxing_description_table_html {signals_by_option_str pins_by_option_str} { - array set pins_by_option $pins_by_option_str - - set options [list] - foreach {option signals} $signals_by_option_str { - lappend options $option - - set pins $pins_by_option($option) - - foreach signal $signals pin $pins { - set key "${option}.${signal}" - set pins_by_option_and_signal($key) $pin - set signal_set($signal) 1 - } - } - - set sorted_signals [lsort -increasing -ascii [array names signal_set]] - set sorted_options [lsort -increasing -ascii $options] - - set ALIGN_CENTER {align="center"} - - set html "" ;# start of table, first row cell empty for signal column - foreach option $sorted_options { - set html "${html}" - } - set html "${html}" - foreach signal $sorted_signals { - set html "${html}" ;# new row w/ first cell (header) being the signal name - foreach option $sorted_options { - set key "${option}.${signal}" - if {[info exists pins_by_option_and_signal($key)]} { - set pin $pins_by_option_and_signal($key) - } else { - set pin "" - } - set html "${html}" - } - set html "${html}" - } - set html "${html}
${option}
${signal}${pin}
" - return $html -} - -proc create_mode_description_table_html {signals_by_mode_str} { - set modes [list] - - foreach {mode signals} $signals_by_mode_str { - lappend modes $mode - foreach signal $signals { - set key "${mode}.${signal}" - set membership_by_mode_and_signal($key) 1 - set signal_set($signal) 1 - } - } - - set sorted_signals [lsort -increasing -ascii [array names signal_set]] - set sorted_modes [lsort -increasing -ascii $modes] - - set ALIGN_CENTER {align="center"} - - set html "" ;# start of table, first row cell empty for signal column - foreach mode $sorted_modes { - set html "${html}" - } - set html "${html}" - foreach signal $sorted_signals { - set html "${html}" ;# new row w/ first cell (header) being the signal name - - foreach mode $sorted_modes { - set key "${mode}.${signal}" - if {[info exists membership_by_mode_and_signal($key)]} { - set member_marker "X" - } else { - set member_marker "" - } - set html "${html}" - } - set html "${html}" - } - set html "${html}
${mode}
${signal}${member_marker}
" - return $html -} - -proc get_quartus_edition {} { - set code { - set version "" - regexp {([a-zA-Z]+) (Edition|Version)$} $quartus(version) total version - return $version - } - set safe_code [string map {\n ; \t ""} $code] - set package_name "advanced_device" - set result [lindex [run_quartus_tcl_command "${package_name}:${safe_code}"] 0] - return $result -} - -proc is_soc_device {device} { - return [::pin_mux_db::verify_soc_device $device] -} - -proc set_peripheral_pin_muxing_descriptions {peripherals_ref} { - upvar 1 $peripherals_ref peripherals - - foreach peripheral_name [array names peripherals] { - set signals_by_option [list] - set pins_by_option [list] - - funset peripheral - array set peripheral $peripherals($peripheral_name) - funset pin_sets - array set pin_sets $peripheral(pin_sets) - - foreach pin_set_name [array names pin_sets] { - funset pin_set - array set pin_set $pin_sets($pin_set_name) - set signals $pin_set(signals) - lappend signals_by_option $pin_set_name $signals - set pins $pin_set(pins) - lappend pins_by_option $pin_set_name $pins - } - set signals_by_mode $peripheral(signals_by_mode) - - set table_html [create_pin_muxing_description_table_html $signals_by_option $pins_by_option] - set pin_muxing_description "" - - set table_html [create_mode_description_table_html $signals_by_mode] - set mode_description "Signal Membership Per Mode Usage Option:
${table_html}" - set_peripheral_pin_muxing_description $peripheral_name $pin_muxing_description $mode_description - } -} - -# Add pin muxing details to soc_io peripheral/signal data -add_storage_parameter pin_muxing {} -add_storage_parameter pin_muxing_check "" -proc ensure_pin_muxing_data {device_family} { - if {[check_device_family_equivalence $device_family [get_module_property SUPPORTED_DEVICE_FAMILIES]] == 0} { - return - } - - set device [get_device] - - if {![is_soc_device $device]} { - send_message error "Selected device '${device}' is not an SoC device. Please choose a valid SoC device to use the Hard Processor System." - return - } - - set device_configuration "${device_family}+${device}" - - set old_device_configuration [get_parameter_value pin_muxing_check] - if {$old_device_configuration == $device_configuration} { - return - } - - set load_rc [::pin_mux_db::load $device] - if {!$load_rc} { - send_message error "The pin information for the Hard Processor System could not be determined. Please check whether your edition of Quartus Prime supports the selected device." - return - } - locations::load $device - - load_peripherals_pin_muxing_model pin_muxing_peripherals - set_peripheral_pin_muxing_descriptions pin_muxing_peripherals - - set gpio_pins [::pin_mux_db::get_gpio_pins] - set loanio_pins [::pin_mux_db::get_loan_io_pins] - set customer_pin_names [::pin_mux_db::get_customer_pin_names] - set hlgpi_pins [::pin_mux_db::get_hlgpi_pins] - - set pin_muxing [list [array get pin_muxing_peripherals] $gpio_pins $loanio_pins $customer_pin_names $hlgpi_pins] - set_parameter_value pin_muxing $pin_muxing - set_parameter_value pin_muxing_check $device_configuration - - #### update pin_muxing data to use in java GUI #### - set pinmux_peripherals [array get pin_muxing_peripherals] - array set periph_key_value $pinmux_peripherals - - foreach {key value} [array get periph_key_value] { - set_parameter_value JAVA_${key}_DATA "$key \{$value\}" - } -} - -proc get_device {} { - - set device_name [get_parameter_value device_name] - return $device_name -} - -proc construct_hps_parameter_map {} { - set parameters [get_parameters] - foreach parameter $parameters { - set value [get_parameter_value $parameter] - set result($parameter) $value - } - return [array get result] -} - -################################################################################ -# Implements interface of util/pin_mux.tcl -# -namespace eval hps_ip_pin_muxing_model { -################################################################################ - proc get_peripherals_model {} { - set pin_muxing [get_parameter_value pin_muxing] - set peripherals [lindex $pin_muxing 0] - return $peripherals - } - proc get_emac0_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_emac0_peripheral_fpga_interface] - } - proc get_lssis_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_low_speed_serial_fpga_interfaces] - } - proc get_all_fpga_ini {} { - return [is_enabled quartus_ini_hps_ip_enable_all_peripheral_fpga_interfaces] - } - proc get_peripheral_pin_muxing_selection {peripheral_name} { - set pin_muxing_param_name [format [PIN_MUX_PARAM_FORMAT] $peripheral_name] - set selection [get_parameter_value $pin_muxing_param_name] - return $selection - } - proc get_peripheral_mode_selection {peripheral_name} { - set mode_param_name [format [MODE_PARAM_FORMAT] $peripheral_name] - set selection [get_parameter_value $mode_param_name] - return $selection - } - proc get_gpio_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 1] - return $pins - } - proc get_loanio_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 2] - return $pins - } - proc get_customer_pin_names {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 3] - return $pins - } - proc get_hlgpi_pins {} { - set pin_muxing [get_parameter_value pin_muxing] - set pins [lindex $pin_muxing 4] - return $pins - } - proc get_unsupported_peripheral {peripheral_name} { - set device_family [get_parameter_value hps_device_family] - set skip 0 - if {[check_device_family_equivalence $device_family ARRIAV]} { - foreach excluded_peripheral [ARRIAV_EXCLUDED_PERIPHRERALS] { - if {[string compare $excluded_peripheral $peripheral_name] == 0} { - set skip 1 - } - } - } - return $skip - } -} - - -## Add documentation links for user guide and/or release notes -add_documentation_link "User Guide" https://www.altera.com/products/soc/overview.html diff --git a/sys/ip/in_split.v b/sys/ip/in_split.v deleted file mode 100644 index e750ff9..0000000 --- a/sys/ip/in_split.v +++ /dev/null @@ -1,52 +0,0 @@ -// in_split.v - - -`timescale 1 ps / 1 ps -module in_split ( - input wire clk, // input.clk - input wire ce, // .ce - input wire de, // .de - input wire h_sync, // .h_sync - input wire v_sync, // .v_sync - input wire f, // .f - input wire [23:0] data, // .data - output wire vid_clk, // Output.vid_clk - output reg vid_datavalid, // .vid_datavalid - output reg [1:0] vid_de, // .vid_de - output reg [1:0] vid_f, // .vid_f - output reg [1:0] vid_h_sync, // .vid_h_sync - output reg [1:0] vid_v_sync, // .vid_v_sync - output reg [47:0] vid_data, // .vid_data - output wire vid_locked, // .vid_locked - output wire [7:0] vid_color_encoding, // .vid_color_encoding - output wire [7:0] vid_bit_width, // .vid_bit_width - input wire clipping, // .clipping - input wire overflow, // .overflow - input wire sof, // .sof - input wire sof_locked, // .sof_locked - input wire refclk_div, // .refclk_div - input wire padding // .padding - ); - - assign vid_bit_width = 0; - assign vid_color_encoding = 0; - assign vid_locked = 1; - assign vid_clk = clk; - - always @(posedge clk) begin - reg odd = 0; - - vid_datavalid <= 0; - if(ce) begin - vid_de[odd] <= de; - vid_f[odd] <= f; - vid_h_sync[odd] <= h_sync; - vid_v_sync[odd] <= v_sync; - if(odd) vid_data[47:24] <= data; - else vid_data[23:0] <= data; - - odd <= ~odd; - vid_datavalid <= odd; - end - end -endmodule diff --git a/sys/ip/in_split_hw.tcl b/sys/ip/in_split_hw.tcl deleted file mode 100644 index 403555a..0000000 --- a/sys/ip/in_split_hw.tcl +++ /dev/null @@ -1,104 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Thu Jan 25 18:50:29 CST 2018 -# DO NOT MODIFY - - -# -# in_split "Input Splitter" v17.0 -# Sorgelig 2018.01.25.18:50:29 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module in_split -# -set_module_property DESCRIPTION "" -set_module_property NAME in_split -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME "Input Splitter" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL in_split -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file in_split.v VERILOG PATH in_split.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point input -# -add_interface input conduit end -set_interface_property input associatedClock "" -set_interface_property input associatedReset "" -set_interface_property input ENABLED true -set_interface_property input EXPORT_OF "" -set_interface_property input PORT_NAME_MAP "" -set_interface_property input CMSIS_SVD_VARIABLES "" -set_interface_property input SVD_ADDRESS_GROUP "" - -add_interface_port input clk clk Input 1 -add_interface_port input ce ce Input 1 -add_interface_port input de de Input 1 -add_interface_port input h_sync h_sync Input 1 -add_interface_port input v_sync v_sync Input 1 -add_interface_port input f f Input 1 -add_interface_port input data data Input 24 - - -# -# connection point Output -# -add_interface Output conduit end -set_interface_property Output associatedClock "" -set_interface_property Output associatedReset "" -set_interface_property Output ENABLED true -set_interface_property Output EXPORT_OF "" -set_interface_property Output PORT_NAME_MAP "" -set_interface_property Output CMSIS_SVD_VARIABLES "" -set_interface_property Output SVD_ADDRESS_GROUP "" - -add_interface_port Output vid_clk vid_clk Output 1 -add_interface_port Output vid_datavalid vid_datavalid Output 1 -add_interface_port Output vid_de vid_de Output 2 -add_interface_port Output vid_f vid_f Output 2 -add_interface_port Output vid_h_sync vid_h_sync Output 2 -add_interface_port Output vid_v_sync vid_v_sync Output 2 -add_interface_port Output vid_data vid_data Output 48 -add_interface_port Output vid_locked vid_locked Output 1 -add_interface_port Output vid_color_encoding vid_color_encoding Output 8 -add_interface_port Output vid_bit_width vid_bit_width Output 8 -add_interface_port Output clipping clipping Input 1 -add_interface_port Output overflow overflow Input 1 -add_interface_port Output sof sof Input 1 -add_interface_port Output sof_locked sof_locked Input 1 -add_interface_port Output refclk_div refclk_div Input 1 -add_interface_port Output padding padding Input 1 - diff --git a/sys/ip/out_mix.v b/sys/ip/out_mix.v deleted file mode 100644 index e135b1c..0000000 --- a/sys/ip/out_mix.v +++ /dev/null @@ -1,44 +0,0 @@ -// out_mix.v - -`timescale 1 ps / 1 ps -module out_mix ( - input wire clk, // Output.clk - output reg de, // .de - output reg h_sync, // .h_sync - output reg v_sync, // .v_sync - output reg [23:0] data, // .data - output reg vid_clk, // input.vid_clk - input wire [1:0] vid_datavalid, // .vid_datavalid - input wire [1:0] vid_h_sync, // .vid_h_sync - input wire [1:0] vid_v_sync, // .vid_v_sync - input wire [47:0] vid_data, // .vid_data - input wire underflow, // .underflow - input wire vid_mode_change, // .vid_mode_change - input wire [1:0] vid_std, // .vid_std - input wire [1:0] vid_f, // .vid_f - input wire [1:0] vid_h, // .vid_h - input wire [1:0] vid_v // .vid_v - ); - - reg r_de; - reg r_h_sync; - reg r_v_sync; - reg [23:0] r_data; - - always @(posedge clk) begin - vid_clk <= ~vid_clk; - - if(~vid_clk) begin - {r_de,de} <= vid_datavalid; - {r_h_sync, h_sync} <= vid_h_sync; - {r_v_sync, v_sync} <= vid_v_sync; - {r_data, data} <= vid_data; - end else begin - de <= r_de; - h_sync <= r_h_sync; - v_sync <= r_v_sync; - data <= r_data; - end - end - -endmodule diff --git a/sys/ip/out_mix_hw.tcl b/sys/ip/out_mix_hw.tcl deleted file mode 100644 index b388891..0000000 --- a/sys/ip/out_mix_hw.tcl +++ /dev/null @@ -1,97 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Thu Jan 25 06:51:26 CST 2018 -# DO NOT MODIFY - - -# -# out_mix "Output Mixer" v1.0 -# Sorgelig 2018.01.25.06:51:26 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module out_mix -# -set_module_property DESCRIPTION "" -set_module_property NAME out_mix -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME "Output Mixer" -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL out_mix -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file out_mix.v VERILOG PATH out_mix.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point Output -# -add_interface Output conduit end -set_interface_property Output associatedClock "" -set_interface_property Output associatedReset "" -set_interface_property Output ENABLED true -set_interface_property Output EXPORT_OF "" -set_interface_property Output PORT_NAME_MAP "" -set_interface_property Output CMSIS_SVD_VARIABLES "" -set_interface_property Output SVD_ADDRESS_GROUP "" - -add_interface_port Output clk clk Input 1 -add_interface_port Output de de Output 1 -add_interface_port Output h_sync h_sync Output 1 -add_interface_port Output v_sync v_sync Output 1 -add_interface_port Output data data Output 24 - - -# -# connection point input -# -add_interface input conduit end -set_interface_property input associatedClock "" -set_interface_property input associatedReset "" -set_interface_property input ENABLED true -set_interface_property input EXPORT_OF "" -set_interface_property input PORT_NAME_MAP "" -set_interface_property input CMSIS_SVD_VARIABLES "" -set_interface_property input SVD_ADDRESS_GROUP "" - -add_interface_port input vid_clk vid_clk Output 1 -add_interface_port input vid_datavalid vid_datavalid Input 2 -add_interface_port input vid_h_sync vid_h_sync Input 2 -add_interface_port input vid_v_sync vid_v_sync Input 2 -add_interface_port input vid_data vid_data Input 48 -add_interface_port input underflow underflow Input 1 -add_interface_port input vid_mode_change vid_mode_change Input 1 -add_interface_port input vid_std vid_std Input 2 -add_interface_port input vid_f vid_f Input 2 -add_interface_port input vid_h vid_h Input 2 -add_interface_port input vid_v vid_v Input 2 - diff --git a/sys/ip/reset_source.v b/sys/ip/reset_source.v deleted file mode 100644 index 1b81394..0000000 --- a/sys/ip/reset_source.v +++ /dev/null @@ -1,50 +0,0 @@ -// reset_source.v - -// This file was auto-generated as a prototype implementation of a module -// created in component editor. It ties off all outputs to ground and -// ignores all inputs. It needs to be edited to make it do something -// useful. -// -// This file will not be automatically regenerated. You should check it in -// to your version control system if you want to keep it. - -`timescale 1 ps / 1 ps -module reset_source -( - input wire clk, // clock.clk - input wire reset_hps, // reset_hps.reset - output wire reset_sys, // reset_sys.reset - output wire reset_cold, // reset_cold.reset - input wire cold_req, // reset_ctl.cold_req - output wire reset, // .reset - input wire reset_req, // .reset_req - input wire reset_vip, // .reset_vip - input wire warm_req, // .warm_req - output wire reset_warm // reset_warm.reset -); - -assign reset_cold = cold_req; -assign reset_warm = warm_req; - -wire reset_m = sys_reset | reset_hps | reset_req; -assign reset = reset_m; -assign reset_sys = reset_m | reset_vip; - -reg sys_reset = 1; -always @(posedge clk) begin - integer timeout = 0; - reg reset_lock = 0; - - reset_lock <= reset_lock | cold_req; - - if(timeout < 2000000) begin - sys_reset <= 1; - timeout <= timeout + 1; - reset_lock <= 0; - end - else begin - sys_reset <= reset_lock; - end -end - -endmodule diff --git a/sys/ip/reset_source_hw.tcl b/sys/ip/reset_source_hw.tcl deleted file mode 100644 index cba39f7..0000000 --- a/sys/ip/reset_source_hw.tcl +++ /dev/null @@ -1,152 +0,0 @@ -# TCL File Generated by Component Editor 17.0 -# Tue Feb 20 07:55:55 CST 2018 -# DO NOT MODIFY - - -# -# reset_source "reset_source" v17.0 -# Sorgelig 2018.02.20.07:55:55 -# -# - -# -# request TCL package from ACDS 16.1 -# -package require -exact qsys 16.1 - - -# -# module reset_source -# -set_module_property DESCRIPTION "" -set_module_property NAME reset_source -set_module_property VERSION 17.0 -set_module_property INTERNAL false -set_module_property OPAQUE_ADDRESS_MAP true -set_module_property AUTHOR Sorgelig -set_module_property DISPLAY_NAME reset_source -set_module_property INSTANTIATE_IN_SYSTEM_MODULE true -set_module_property EDITABLE true -set_module_property REPORT_TO_TALKBACK false -set_module_property ALLOW_GREYBOX_GENERATION false -set_module_property REPORT_HIERARCHY false - - -# -# file sets -# -add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" -set_fileset_property QUARTUS_SYNTH TOP_LEVEL reset_source -set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false -set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE true -add_fileset_file reset_source.v VERILOG PATH reset_source.v TOP_LEVEL_FILE - - -# -# parameters -# - - -# -# display items -# - - -# -# connection point clock -# -add_interface clock clock end -set_interface_property clock clockRate 0 -set_interface_property clock ENABLED true -set_interface_property clock EXPORT_OF "" -set_interface_property clock PORT_NAME_MAP "" -set_interface_property clock CMSIS_SVD_VARIABLES "" -set_interface_property clock SVD_ADDRESS_GROUP "" - -add_interface_port clock clk clk Input 1 - - -# -# connection point reset_hps -# -add_interface reset_hps reset end -set_interface_property reset_hps associatedClock "" -set_interface_property reset_hps synchronousEdges NONE -set_interface_property reset_hps ENABLED true -set_interface_property reset_hps EXPORT_OF "" -set_interface_property reset_hps PORT_NAME_MAP "" -set_interface_property reset_hps CMSIS_SVD_VARIABLES "" -set_interface_property reset_hps SVD_ADDRESS_GROUP "" - -add_interface_port reset_hps reset_hps reset Input 1 - - -# -# connection point reset_sys -# -add_interface reset_sys reset start -set_interface_property reset_sys associatedClock "" -set_interface_property reset_sys associatedDirectReset "" -set_interface_property reset_sys associatedResetSinks "" -set_interface_property reset_sys synchronousEdges NONE -set_interface_property reset_sys ENABLED true -set_interface_property reset_sys EXPORT_OF "" -set_interface_property reset_sys PORT_NAME_MAP "" -set_interface_property reset_sys CMSIS_SVD_VARIABLES "" -set_interface_property reset_sys SVD_ADDRESS_GROUP "" - -add_interface_port reset_sys reset_sys reset Output 1 - - -# -# connection point reset_ctl -# -add_interface reset_ctl conduit end -set_interface_property reset_ctl associatedClock "" -set_interface_property reset_ctl associatedReset "" -set_interface_property reset_ctl ENABLED true -set_interface_property reset_ctl EXPORT_OF "" -set_interface_property reset_ctl PORT_NAME_MAP "" -set_interface_property reset_ctl CMSIS_SVD_VARIABLES "" -set_interface_property reset_ctl SVD_ADDRESS_GROUP "" - -add_interface_port reset_ctl cold_req cold_req Input 1 -add_interface_port reset_ctl reset reset Output 1 -add_interface_port reset_ctl reset_req reset_req Input 1 -add_interface_port reset_ctl warm_req warm_req Input 1 -add_interface_port reset_ctl reset_vip reset_vip Input 1 - - -# -# connection point reset_warm -# -add_interface reset_warm reset start -set_interface_property reset_warm associatedClock "" -set_interface_property reset_warm associatedDirectReset "" -set_interface_property reset_warm associatedResetSinks "" -set_interface_property reset_warm synchronousEdges NONE -set_interface_property reset_warm ENABLED true -set_interface_property reset_warm EXPORT_OF "" -set_interface_property reset_warm PORT_NAME_MAP "" -set_interface_property reset_warm CMSIS_SVD_VARIABLES "" -set_interface_property reset_warm SVD_ADDRESS_GROUP "" - -add_interface_port reset_warm reset_warm reset Output 1 - - -# -# connection point reset_cold -# -add_interface reset_cold reset start -set_interface_property reset_cold associatedClock "" -set_interface_property reset_cold associatedDirectReset "" -set_interface_property reset_cold associatedResetSinks "" -set_interface_property reset_cold synchronousEdges NONE -set_interface_property reset_cold ENABLED true -set_interface_property reset_cold EXPORT_OF "" -set_interface_property reset_cold PORT_NAME_MAP "" -set_interface_property reset_cold CMSIS_SVD_VARIABLES "" -set_interface_property reset_cold SVD_ADDRESS_GROUP "" - -add_interface_port reset_cold reset_cold reset Output 1 - diff --git a/sys/lpf48k.sv b/sys/lpf48k.sv deleted file mode 100644 index 2a32981..0000000 --- a/sys/lpf48k.sv +++ /dev/null @@ -1,100 +0,0 @@ -// low pass filter -// Revision 1.00 -// -// Copyright (c) 2008 Takayuki Hara. -// All rights reserved. -// -// Redistribution and use of this source code or any derivative works, are -// permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. Redistributions may not be sold, nor may they be used in a commercial -// product or activity without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// -// LPF (cut off 48kHz at 3.58MHz) - -module lpf48k #(parameter MSB = 15) -( - input RESET, - input CLK, - input CE, - input ENABLE, - - input [MSB:0] IDATA, - output [MSB:0] ODATA -); - -wire [7:0] LPF_TAP_DATA[0:71] = -'{ - 8'h51, 8'h07, 8'h07, 8'h08, 8'h08, 8'h08, 8'h09, 8'h09, - 8'h09, 8'h0A, 8'h0A, 8'h0A, 8'h0A, 8'h0B, 8'h0B, 8'h0B, - 8'h0B, 8'h0C, 8'h0C, 8'h0C, 8'h0C, 8'h0D, 8'h0D, 8'h0D, - 8'h0D, 8'h0D, 8'h0D, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, - 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, - 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0E, 8'h0D, 8'h0D, 8'h0D, - 8'h0D, 8'h0D, 8'h0D, 8'h0C, 8'h0C, 8'h0C, 8'h0C, 8'h0B, - 8'h0B, 8'h0B, 8'h0B, 8'h0A, 8'h0A, 8'h0A, 8'h0A, 8'h09, - 8'h09, 8'h09, 8'h08, 8'h08, 8'h08, 8'h07, 8'h07, 8'h51 -}; - -reg [7:0] FF_ADDR = 0; -reg [MSB+10:0] FF_INTEG = 0; -wire [MSB+8:0] W_DATA; -wire W_ADDR_END; - -assign W_ADDR_END = ((FF_ADDR == 71)); - -reg [MSB:0] OUT; - -assign ODATA = ENABLE ? OUT : IDATA; - -always @(posedge RESET or posedge CLK) begin - if (RESET) FF_ADDR <= 0; - else - begin - if (CE) begin - if (W_ADDR_END) FF_ADDR <= 0; - else FF_ADDR <= FF_ADDR + 1'd1; - end - end -end - -assign W_DATA = LPF_TAP_DATA[FF_ADDR] * IDATA; - -always @(posedge RESET or posedge CLK) begin - if (RESET) FF_INTEG <= 0; - else - begin - if (CE) begin - if (W_ADDR_END) FF_INTEG <= 0; - else FF_INTEG <= FF_INTEG + W_DATA; - end - end -end - -always @(posedge RESET or posedge CLK) begin - if (RESET) OUT <= 0; - else - begin - if (CE && W_ADDR_END) OUT <= FF_INTEG[MSB + 10:10]; - end -end - -endmodule diff --git a/sys/ltc2308.sv b/sys/ltc2308.sv new file mode 100644 index 0000000..33134fd --- /dev/null +++ b/sys/ltc2308.sv @@ -0,0 +1,162 @@ +//============================================================================ +// +// LTC2308 controller +// Copyright (C) 2019 Sorgelig +// +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +//============================================================================ + + +// NUM_CH 1..8 +// Sampling rate = ADC_RATE/NUM_CH +// ADC_RATE max is ~500KHz +// CLK_RATE max is ~80MHz +module ltc2308 #(parameter NUM_CH = 2, ADC_RATE = 96000, CLK_RATE = 50000000) +( + input reset, + input clk, + + inout [3:0] ADC_BUS, + + output reg dout_sync, // toggle with every ADC round + output reg [(NUM_CH*12)-1:0] dout // 12 bits per channel (unsigned) +); + +localparam TCONV = CLK_RATE/625000; + +reg sck; +wire sdo = cfg[5]; + +assign ADC_BUS[3] = sck; +wire sdi = ADC_BUS[2]; +assign ADC_BUS[1] = sdo; +assign ADC_BUS[0] = convst; + +reg convst; +reg [5:0] cfg; + +reg [31:0] sum; +wire [31:0] next_sum = sum + ADC_RATE; + +reg [2:0] pin; +wire [2:0] next_pin = (pin == (NUM_CH-1)) ? 3'd0 : (pin + 1'd1); + +always @(posedge clk) begin + reg [7:0] tconv; + reg [3:0] bitcnt; + reg [10:0] adcin; + + convst <= 0; + + if(reset) begin + sum <= 0; + tconv <= 0; + bitcnt <= 0; + sck <= 0; + cfg <= 0; + dout <= 0; + pin <= NUM_CH[2:0]-1'd1; + end + else begin + sum <= next_sum; + if(next_sum >= CLK_RATE) begin + sum <= next_sum - CLK_RATE; + tconv <= TCONV[7:0]; + convst <= 1; + bitcnt <= 12; + cfg <= {1'b1, next_pin[0], next_pin[2:1], 1'b1, 1'b0}; + if(!next_pin) dout_sync <= ~dout_sync; + end + + if(tconv) tconv <= tconv - 1'd1; + else if(bitcnt) begin + sck <= ~sck; + + if(sck) cfg <= cfg<<1; + else begin + adcin <= {adcin[9:0],sdi}; + bitcnt <= bitcnt - 1'd1; + if(bitcnt == 1) begin + dout[pin*12 +:12] <= {adcin,sdi}; + pin <= next_pin; + end + end + end + else sck <= 0; + end +end + +endmodule + +module ltc2308_tape #(parameter HIST_LOW = 16, HIST_HIGH = 64, ADC_RATE = 48000, CLK_RATE = 50000000) +( + input reset, + input clk, + + inout [3:0] ADC_BUS, + output reg dout, + output active +); + +wire [11:0] adc_data; +wire adc_sync; +ltc2308 #(1, ADC_RATE, CLK_RATE) adc +( + .reset(reset), + .clk(clk), + + .ADC_BUS(ADC_BUS), + .dout(adc_data), + .dout_sync(adc_sync) +); + +always @(posedge clk) begin + reg [13:0] data1,data2,data3,data4, sum; + reg adc_sync_d; + + adc_sync_d<=adc_sync; + if(adc_sync_d ^ adc_sync) begin + data1 <= data2; + data2 <= data3; + data3 <= data4; + data4 <= adc_data; + + sum <= data1+data2+data3+data4; + + if(sum[13:2]HIST_HIGH) dout <= 1; + end +end + +assign active = |act; + +reg [1:0] act; +always @(posedge clk) begin + reg [31:0] onesec; + reg old_dout; + + onesec <= onesec + 1; + if(onesec>CLK_RATE) begin + onesec <= 0; + if(act) act <= act - 1'd1; + end + + old_dout <= dout; + if(old_dout ^ dout) act <= 2; +end + +endmodule diff --git a/sys/math.sv b/sys/math.sv new file mode 100644 index 0000000..1cf327f --- /dev/null +++ b/sys/math.sv @@ -0,0 +1,109 @@ + +// result = num/div +module sys_udiv +#( + parameter NB_NUM, + parameter NB_DIV +) +( + input clk, + input start, + output busy, + + input [NB_NUM-1:0] num, + input [NB_DIV-1:0] div, + output reg [NB_NUM-1:0] result, + output reg [NB_DIV-1:0] remainder +); + +reg run; +assign busy = run; + +always @(posedge clk) begin + reg [5:0] cpt; + reg [NB_NUM+NB_DIV+1:0] rem; + + if (start) begin + cpt <= 0; + run <= 1; + rem <= num; + end + else if (run) begin + cpt <= cpt + 1'd1; + run <= (cpt != NB_NUM + 1'd1); + remainder <= rem[NB_NUM+NB_DIV:NB_NUM+1]; + if (!rem[NB_DIV + NB_NUM + 1'd1]) + rem <= {rem[NB_DIV+NB_NUM:0] - (div << NB_NUM),1'b0}; + else + rem <= {rem[NB_DIV+NB_NUM:0] + (div << NB_NUM),1'b0}; + result <= {result[NB_NUM-2:0], !rem[NB_DIV + NB_NUM + 1'd1]}; + end +end + +endmodule + +// result = mul1*mul2 +module sys_umul +#( + parameter NB_MUL1, + parameter NB_MUL2 +) +( + input clk, + input start, + output busy, + + input [NB_MUL1-1:0] mul1, + input [NB_MUL2-1:0] mul2, + output reg [NB_MUL1+NB_MUL2-1:0] result +); + +reg run; +assign busy = run; + +always @(posedge clk) begin + reg [NB_MUL1+NB_MUL2-1:0] add; + reg [NB_MUL2-1:0] map; + + if (start) begin + run <= 1; + result <= 0; + add <= mul1; + map <= mul2; + end + else if (run) begin + if(!map) run <= 0; + if(map[0]) result <= result + add; + add <= add << 1; + map <= map >> 1; + end +end + +endmodule + +// result = (mul1*mul2)/div +module sys_umuldiv +#( + parameter NB_MUL1, + parameter NB_MUL2, + parameter NB_DIV +) +( + input clk, + input start, + output busy, + + input [NB_MUL1-1:0] mul1, + input [NB_MUL2-1:0] mul2, + input [NB_DIV-1:0] div, + output [NB_MUL1+NB_MUL2-1:0] result, + output [NB_DIV-1:0] remainder +); + +wire mul_run; +wire [NB_MUL1+NB_MUL2-1:0] mul_res; +sys_umul #(NB_MUL1,NB_MUL2) umul(clk,start,mul_run,mul1,mul2,mul_res); + +sys_udiv #(NB_MUL1+NB_MUL2,NB_DIV) udiv(clk,start|mul_run,busy,mul_res,div,result,remainder); + +endmodule diff --git a/sys/mcp23009.sv b/sys/mcp23009.sv new file mode 100644 index 0000000..40cbf5e --- /dev/null +++ b/sys/mcp23009.sv @@ -0,0 +1,113 @@ +// +// MCP23009 +// (C) 2019 Alexey Melnikov +// +module mcp23009 +( + input clk, + + output reg [2:0] btn, + input [2:0] led, + output reg sd_cd, + + output scl, + inout sda +); + + +reg start = 0; +wire ready; +wire error; +reg rw; +wire [7:0] dout; +reg [15:0] din; + +i2c #(50_000_000, 500_000) i2c +( + .CLK(clk), + .START(start), + .READ(rw), + .I2C_ADDR('h20), + .I2C_WLEN(1), + .I2C_WDATA1(din[15:8]), + .I2C_WDATA2(din[7:0]), + .I2C_RDATA(dout), + .END(ready), + .ACK(error), + .I2C_SCL(scl), + .I2C_SDA(sda) +); + +always@(posedge clk) begin + reg [3:0] idx = 0; + reg [1:0] state = 0; + reg [15:0] timeout = 0; + + if(~&timeout) begin + timeout <= timeout + 1'd1; + start <= 0; + state <= 0; + idx <= 0; + btn <= 0; + rw <= 0; + sd_cd <= 1; + end + else begin + if(~&init_data[idx]) begin + case(state) + 0: begin + start <= 1; + state <= 1; + din <= init_data[idx]; + end + 1: if(~ready) state <= 2; + 2: begin + start <= 0; + if(ready) begin + state <= 0; + if(!error) idx <= idx + 1'd1; + end + end + endcase + end + else begin + case(state) + 0: begin + start <= 1; + state <= 1; + din <= {8'h09,5'b00000,led}; + end + 1: if(~ready) state <= 2; + 2: begin + start <= 0; + if(ready) begin + state <= 0; + rw <= 0; + if(!error) begin + if(rw) {sd_cd, btn} <= {dout[7], dout[5:3]}; + rw <= ~rw; + end + end + end + endcase + end + end +end + +wire [15:0] init_data[12] = +'{ + 16'h00F8, + 16'h0138, + 16'h0200, + 16'h0300, + 16'h0400, + 16'h0524, + 16'h06FF, + 16'h0700, + 16'h0800, + 16'h0900, + 16'h0A00, + 16'hFFFF +}; + +endmodule diff --git a/sys/mt32pi.sv b/sys/mt32pi.sv new file mode 100644 index 0000000..cafa880 --- /dev/null +++ b/sys/mt32pi.sv @@ -0,0 +1,283 @@ +// +// Communication module to MT32-pi (external MIDI emulator on RPi) +// (C) 2020 Sorgelig, Kitrinx +// +// https://github.com/dwhinham/mt32-pi +// + +module mt32pi +( + input CLK_AUDIO, + + input CLK_VIDEO, + input CE_PIXEL, + input VGA_VS, + input VGA_DE, + + input [6:0] USER_IN, + output [6:0] USER_OUT, + + input reset, + input midi_tx, + output midi_rx, + + output reg [15:0] mt32_i2s_r, + output reg [15:0] mt32_i2s_l, + + output reg mt32_available, + + input mt32_mode_req, + input [1:0] mt32_rom_req, + input [7:0] mt32_sf_req, + + output reg [7:0] mt32_mode, + output reg [7:0] mt32_rom, + output reg [7:0] mt32_sf, + output reg mt32_newmode, + + output reg mt32_lcd_en, + output reg mt32_lcd_pix, + output reg mt32_lcd_update +); + +// +// Pin | USB Name | Signal +// ----+----------+-------------- +// 0 | D+ | I/O I2C_SDA / RX (midi in) +// 1 | D- | O TX (midi out) +// 2 | TX- | I I2S_WS (1 == right) +// 3 | GND_d | I I2C_SCL +// 4 | RX+ | I I2S_BCLK +// 5 | RX- | I I2S_DAT +// 6 | TX+ | - none +// + +assign USER_OUT[0] = sda_out; +assign USER_OUT[1] = midi_tx; +assign USER_OUT[6:2] = '1; + + +// +// crossed/straight cable selection +// + +generate + genvar i; + for(i = 0; i<2; i++) begin : clk_rate + wire clk_in = i ? USER_IN[6] : USER_IN[4]; + reg [4:0] cnt; + always @(posedge CLK_AUDIO) begin : clkr + reg clk_sr, clk, old_clk; + reg [4:0] cnt_tmp; + + clk_sr <= clk_in; + if (clk_sr == clk_in) clk <= clk_sr; + + if(~&cnt_tmp) cnt_tmp <= cnt_tmp + 1'd1; + else cnt <= '1; + + old_clk <= clk; + if(~old_clk & clk) begin + cnt <= cnt_tmp; + cnt_tmp <= 0; + end + end + end + + reg crossed; + always @(posedge CLK_AUDIO) crossed <= (clk_rate[0].cnt <= clk_rate[1].cnt); +endgenerate + +wire i2s_ws = crossed ? USER_IN[2] : USER_IN[5]; +wire i2s_data = crossed ? USER_IN[5] : USER_IN[2]; +wire i2s_bclk = crossed ? USER_IN[4] : USER_IN[6]; +assign midi_rx = ~mt32_available ? USER_IN[0] : crossed ? USER_IN[6] : USER_IN[4]; + + +// +// i2s receiver +// + +always @(posedge CLK_AUDIO) begin : i2s_proc + reg [15:0] i2s_buf = 0; + reg [4:0] i2s_cnt = 0; + reg clk_sr; + reg i2s_clk = 0; + reg old_clk, old_ws; + reg i2s_next = 0; + + // Debounce clock + clk_sr <= i2s_bclk; + if (clk_sr == i2s_bclk) i2s_clk <= clk_sr; + + // Latch data and ws on rising edge + old_clk <= i2s_clk; + if (i2s_clk && ~old_clk) begin + + if (~i2s_cnt[4]) begin + i2s_cnt <= i2s_cnt + 1'd1; + i2s_buf[~i2s_cnt[3:0]] <= i2s_data; + end + + // Word Select will change 1 clock before the new word starts + old_ws <= i2s_ws; + if (old_ws != i2s_ws) i2s_next <= 1; + end + + if (i2s_next) begin + i2s_next <= 0; + i2s_cnt <= 0; + i2s_buf <= 0; + + if (i2s_ws) mt32_i2s_l <= i2s_buf; + else mt32_i2s_r <= i2s_buf; + end + + if (reset) begin + i2s_buf <= 0; + mt32_i2s_l <= 0; + mt32_i2s_r <= 0; + end +end + + +// +// i2c slave +// + +reg sda_out; +reg [7:0] lcd_data[1024]; +reg lcd_sz; + +reg reset_r = 0; +wire [7:0] mode_req = reset_r ? 8'hA0 : mt32_mode_req ? 8'hA2 : 8'hA1; +wire [7:0] rom_req = {6'd0, mt32_rom_req}; + +always @(posedge CLK_AUDIO) begin : i2c_slave + reg sda_sr, scl_sr; + reg old_sda, old_scl; + reg sda, scl; + reg [7:0] tmp; + reg [3:0] cnt = 0; + reg [10:0] bcnt = 0; + reg ack; + reg i2c_rw; + reg disp, dispdata; + reg [2:0] div; + reg old_reset; + + old_reset <= reset; + if(old_reset & ~reset) sda_out <= 1; + + div <= div + 1'd1; + if(!div) begin + sda_sr <= USER_IN[0]; + if(sda_sr == USER_IN[0]) sda <= sda_sr; + old_sda <= sda; + + scl_sr <= USER_IN[3]; + if(scl_sr == USER_IN[3]) scl <= scl_sr; + old_scl <= scl; + + //start + if(old_scl & scl & old_sda & ~sda) begin + cnt <= 9; + bcnt <= 0; + ack <= 0; + i2c_rw <= 0; + disp <= 0; + dispdata <= 0; + end + + //stop + if(old_scl & scl & ~old_sda & sda) begin + cnt <= 0; + if(dispdata) begin + lcd_sz <= ~bcnt[9]; + mt32_lcd_update <= ~mt32_lcd_update; + end + end + + //data latch + if(~old_scl && scl && cnt) begin + tmp <= {tmp[6:0], sda}; + cnt <= cnt - 1'd1; + end + + if(!cnt) sda_out <= 1; + + //data set + if(old_scl && ~scl) begin + sda_out <= 1; + if(cnt == 1) begin + if(!bcnt) begin + if(tmp[7:1] == 'h45 || tmp[7:1] == 'h3c) begin + disp <= (tmp[7:1] == 'h3c); + sda_out <= 0; + mt32_available <= 1; + ack <= 1; + i2c_rw <= tmp[0]; + bcnt <= bcnt + 1'd1; + cnt <= 10; + end + else begin + // wrong address, stop + cnt <= 0; + end + end + else if(ack) begin + if(~i2c_rw) begin + if(disp) begin + if(bcnt == 1) dispdata <= (tmp[7:6] == 2'b01); + else if(dispdata) lcd_data[bcnt[9:0] - 2'd2] <= tmp; + end + else begin + if(bcnt == 1) mt32_mode <= tmp; + if(bcnt == 2) mt32_rom <= tmp; + if(bcnt == 3) mt32_sf <= tmp; + if(bcnt == 3) mt32_newmode <= ~mt32_newmode; + end + end + if(~&bcnt) bcnt <= bcnt + 1'd1; + sda_out <= 0; + cnt <= 10; + end + end + else if(i2c_rw && ack && cnt && ~disp) begin + if(bcnt == 1) sda_out <= mode_req[cnt[2:0] - 2'd2]; + if(bcnt == 2) sda_out <= rom_req[cnt[2:0] - 2'd2]; + if(bcnt == 3) sda_out <= mt32_sf_req[cnt[2:0] - 2'd2]; + if(bcnt == 3) reset_r <= 0; + end + end + end + + if(reset) begin + reset_r <= 1; + mt32_available <= 0; + end +end + +always @(posedge CLK_VIDEO) begin + reg old_de, old_vs; + reg [7:0] hcnt; + reg [6:0] vcnt; + reg [7:0] sh; + + if(CE_PIXEL) begin + old_de <= VGA_DE; + old_vs <= VGA_VS; + + if(~&hcnt) hcnt <= hcnt + 1'd1; + sh <= (sh << 1) | (~old_de & VGA_DE); + if(sh[7]) hcnt <= 0; + + if(old_de & ~VGA_DE & ~&vcnt) vcnt <= vcnt + 1'd1; + if(~old_vs & VGA_VS) vcnt <= 0; + + mt32_lcd_en <= mt32_available & ~hcnt[7] && (lcd_sz ? !vcnt[6] : !vcnt[6:5]); + mt32_lcd_pix <= lcd_data[{vcnt[5:3],hcnt[6:0]}][vcnt[2:0]]; + end +end + +endmodule diff --git a/sys/osd.v b/sys/osd.v index f6e8915..782fc81 100644 --- a/sys/osd.v +++ b/sys/osd.v @@ -4,40 +4,58 @@ module osd ( input clk_sys, - input io_osd, input io_strobe, input [15:0] io_din, input clk_video, input [23:0] din, - output [23:0] dout, input de_in, - output reg de_out + input vs_in, + input hs_in, + output [23:0] dout, + output reg de_out, + output reg vs_out, + output reg hs_out, + + output reg osd_status ); parameter OSD_COLOR = 3'd4; -parameter OSD_X_OFFSET = 12'd0; -parameter OSD_Y_OFFSET = 12'd0; localparam OSD_WIDTH = 12'd256; localparam OSD_HEIGHT = 12'd64; -reg osd_enable; -(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[4096]; +`ifdef OSD_HEADER +localparam OSD_HDR = 12'd24; +`else +localparam OSD_HDR = 12'd0; +`endif + +reg osd_enable; +(* ramstyle="no_rw_check" *) reg [7:0] osd_buffer[OSD_HDR ? (4096+1024) : 4096]; -reg highres = 0; reg info = 0; reg [8:0] infoh; reg [8:0] infow; -reg [11:0] infox; +reg [21:0] infox; reg [21:0] infoy; +reg [21:0] osd_h; +reg [21:0] osd_t; +reg [21:0] osd_w; + +reg [1:0] rot = 0; always@(posedge clk_sys) begin - reg [11:0] bcnt; + reg [12:0] bcnt; reg [7:0] cmd; reg has_cmd; reg old_strobe; + reg highres = 0; + + osd_t <= rot[0] ? OSD_WIDTH : (OSD_HEIGHT<<1); + osd_h <= rot[0] ? (info ? infow : OSD_WIDTH) : info ? infoh : (OSD_HEIGHT<> 9) > 1) ? (((cnt+1'b1) >> 9) - 1) : 0; + pixsz <= (((cnt+1'b1) >> (9-rot[0])) > 1) ? (((cnt+1'b1) >> (9-rot[0])) - 1'd1) : 22'd0; pixcnt <= 0; end end -reg [23:0] h_cnt; -reg [21:0] v_cnt; -reg [21:0] dsp_width; -reg [21:0] dsp_height; -reg [7:0] osd_byte; -reg [21:0] osd_vcnt; -reg [21:0] fheight; +reg [2:0] osd_de; +reg osd_pixel; +reg [21:0] v_cnt; +reg v_cnt_h, v_cnt_1, v_cnt_2, v_cnt_3, v_cnt_4; +reg [21:0] v_osd_start_h, v_osd_start_1, v_osd_start_2, v_osd_start_3, v_osd_start_4, v_osd_start_5; +reg [21:0] v_info_start_h, v_info_start_1, v_info_start_2, v_info_start_3, v_info_start_4, v_info_start_5; -reg [21:0] finfoy; -wire [21:0] hrheight = info ? infoh : (OSD_HEIGHT<>1))>>1; + v_osd_start_1 <= (v_cnt-osd_h_hdr)>>1; + v_osd_start_2 <= (v_cnt-(osd_h_hdr<<1))>>1; + v_osd_start_3 <= (v_cnt-(osd_h_hdr + (osd_h_hdr<<1)))>>1; + v_osd_start_4 <= (v_cnt-(osd_h_hdr<<2))>>1; + v_osd_start_5 <= (v_cnt-(osd_h_hdr + (osd_h_hdr<<2)))>>1; + + v_info_start_h <= rot[0] ? infox : infoy; + v_info_start_1 <= rot[0] ? infox : infoy; + v_info_start_2 <= rot[0] ? (infox<<1) : (infoy<<1); + v_info_start_3 <= rot[0] ? (infox + (infox << 1)) : (infoy + (infoy << 1)); + v_info_start_4 <= rot[0] ? (infox << 2) : (infoy << 2); + v_info_start_5 <= rot[0] ? (infox + (infox << 2)) : (infoy + (infoy << 2)); +end always @(posedge clk_video) begin - reg deD; - reg [1:0] osd_div; - reg [1:0] multiscan; - + reg deD; + reg [2:0] osd_div; + reg [2:0] multiscan; + reg [7:0] osd_byte; + reg [23:0] h_cnt; + reg [21:0] dsp_width; + reg [21:0] osd_vcnt; + reg [21:0] h_osd_start; + reg [21:0] v_osd_start; + reg [21:0] osd_hcnt; + reg [21:0] osd_hcnt2; + reg osd_de1,osd_de2; + reg [1:0] osd_en; + reg f1; + reg half; + if(ce_pix) begin deD <= de_in; if(~&h_cnt) h_cnt <= h_cnt + 1'd1; + if(~&osd_hcnt) osd_hcnt <= osd_hcnt + 1'd1; + if(~&osd_hcnt2) osd_hcnt2 <= osd_hcnt2 + 1'd1; + + if (h_cnt == h_osd_start) begin + osd_de[0] <= osd_en[1] && osd_h && ( + osd_vcnt[11] ? (osd_vcnt[7] && (osd_vcnt[6:0] >= 4) && (osd_vcnt[6:0] < 19)) : + (info && (rot == 3)) ? !osd_vcnt[21:8] : + (osd_vcnt < osd_h) + ); + osd_hcnt <= 0; + osd_hcnt2 <= 0; + if(info && rot == 1) osd_hcnt2 <= 22'd128-infoh; + end + if (osd_hcnt+1 == osd_w) osd_de[0] <= 0; + // falling edge of de if(!de_in && deD) dsp_width <= h_cnt[21:0]; // rising edge of de if(de_in && !deD) begin + h_cnt <= 0; v_cnt <= v_cnt + 1'd1; - if(h_cnt > {dsp_width, 2'b00}) begin - v_cnt <= 0; - dsp_height <= v_cnt; + h_osd_start <= info ? (rot[0] ? infoy : infox) : (((dsp_width - osd_w)>>1) - 2'd2); - if(osd_enable) begin - if(v_cnt<320) begin + if(h_cnt > {dsp_width, 2'b00}) begin + v_cnt <= 1; + f1 <= ~f1; // skip every other frame for interlace compatibility. + if(~f1) begin + + osd_en <= (osd_en << 1) | osd_enable; + if(~osd_enable) osd_en <= 0; + + half <= 0; + if(v_cnt_h) begin multiscan <= 0; - fheight <= hrheight; - finfoy <= infoy; + v_osd_start <= info ? v_info_start_h : v_osd_start_h; + half <= 1; end - else if(v_cnt<640) begin + else if(v_cnt_1 | (rot[0] & v_cnt_2)) begin + multiscan <= 0; + v_osd_start <= info ? v_info_start_1 : v_osd_start_1; + end + else if(rot[0] ? v_cnt_3 : v_cnt_2) begin multiscan <= 1; - fheight <= hrheight << 1; - finfoy <= infoy << 1; + v_osd_start <= info ? v_info_start_2 : v_osd_start_2; end - else if(v_cnt<960) begin + else if(rot[0] ? v_cnt_4 : v_cnt_3) begin multiscan <= 2; - fheight <= hrheight + (hrheight<<1); - finfoy <= infoy + (infoy << 1); + v_osd_start <= info ? v_info_start_3 : v_osd_start_3; + end + else if(rot[0] | v_cnt_4) begin + multiscan <= 3; + v_osd_start <= info ? v_info_start_4 : v_osd_start_4; end else begin - multiscan <= 3; - fheight <= hrheight << 2; - finfoy <= infoy << 2; + multiscan <= 4; + v_osd_start <= info ? v_info_start_5 : v_osd_start_5; end end - else begin - fheight <= 0; - end end - h_cnt <= 0; - + osd_div <= osd_div + 1'd1; if(osd_div == multiscan) begin osd_div <= 0; - osd_vcnt <= osd_vcnt + 1'd1; + if(~osd_vcnt[10]) osd_vcnt <= osd_vcnt + 1'd1 + half; + if(osd_vcnt == 'b100010011111 && ~info) osd_vcnt <= 0; + end + if(v_osd_start == v_cnt) begin + {osd_div,osd_vcnt} <= 0; + if(info && rot == 3) osd_vcnt <= 22'd256-infow; + else if(OSD_HDR && !rot) osd_vcnt <= {~info, 3'b000, ~info, 7'b0000000}; end - if(v_osd_start == (v_cnt+1'b1)) {osd_div, osd_vcnt} <= 0; end - - osd_byte <= osd_buffer[{osd_vcnt[6:3], osd_hcnt[7:0]}]; + + osd_byte <= osd_buffer[rot[0] ? ({osd_hcnt2[6:3], osd_vcnt[7:0]} ^ { {4{~rot[1]}}, {8{rot[1]}} }) : {osd_vcnt[7:3], osd_hcnt[7:0]}]; + osd_pixel <= osd_byte[rot[0] ? ((osd_hcnt2[2:0]-1'd1) ^ {3{~rot[1]}}) : osd_vcnt[2:0]]; + osd_de[2:1] <= osd_de[1:0]; end end -// area in which OSD is being displayed -wire [21:0] h_osd_start = info ? infox : ((dsp_width - OSD_WIDTH)>>1) + OSD_X_OFFSET; -wire [21:0] h_osd_end = info ? (h_osd_start + infow) : (h_osd_start + OSD_WIDTH); -wire [21:0] v_osd_start = info ? finfoy : ((dsp_height- fheight)>>1) + OSD_Y_OFFSET; -wire [21:0] v_osd_end = v_osd_start + fheight; - -wire [21:0] osd_hcnt = h_cnt[21:0] - h_osd_start + 1'd1; - -wire osd_de = osd_enable && fheight && - (h_cnt >= h_osd_start) && (h_cnt < h_osd_end) && - (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); - -wire osd_pixel = osd_byte[osd_vcnt[2:0]]; - reg [23:0] rdout; assign dout = rdout; - + always @(posedge clk_video) begin - rdout <= !osd_de ? din : {{osd_pixel, osd_pixel, OSD_COLOR[2], din[23:19]}, - {osd_pixel, osd_pixel, OSD_COLOR[1], din[15:11]}, - {osd_pixel, osd_pixel, OSD_COLOR[0], din[7:3]}}; - de_out <= de_in; + reg [23:0] ordout1, nrdout1, rdout2, rdout3; + reg de1,de2,de3; + reg osd_mux; + reg vs1,vs2,vs3; + reg hs1,hs2,hs3; + + nrdout1 <= din; + ordout1 <= {{osd_pixel, osd_pixel, OSD_COLOR[2], din[23:19]},// 23:16 + {osd_pixel, osd_pixel, OSD_COLOR[1], din[15:11]},// 15:8 + {osd_pixel, osd_pixel, OSD_COLOR[0], din[7:3]}}; // 7:0 + + osd_mux <= ~osd_de[2]; + rdout2 <= osd_mux ? nrdout1 : ordout1; + rdout3 <= rdout2; + + de1 <= de_in; de2 <= de1; de3 <= de2; + hs1 <= hs_in; hs2 <= hs1; hs3 <= hs2; + vs1 <= vs_in; vs2 <= vs1; vs3 <= vs2; + + rdout <= rdout3; + de_out <= de3; + hs_out <= hs3; + vs_out <= vs3; end endmodule diff --git a/sys/pattern_vg.v b/sys/pattern_vg.v deleted file mode 100644 index 1392e1b..0000000 --- a/sys/pattern_vg.v +++ /dev/null @@ -1,120 +0,0 @@ -module pattern_vg -#( - parameter B=8, // number of bits per channel - X_BITS=13, - Y_BITS=13, - FRACTIONAL_BITS = 12 -) - -( - input reset, clk_in, - input wire [X_BITS-1:0] x, - input wire [Y_BITS-1:0] y, - input wire vn_in, hn_in, dn_in, - input wire [B-1:0] r_in, g_in, b_in, - output reg vn_out, hn_out, den_out, - output reg [B-1:0] r_out, g_out, b_out, - input wire [X_BITS-1:0] total_active_pix, - input wire [Y_BITS-1:0] total_active_lines, - input wire [7:0] pattern, - input wire [B+FRACTIONAL_BITS-1:0] ramp_step -); - -reg [B+FRACTIONAL_BITS-1:0] ramp_values; // 12-bit fractional end for ramp values - - -//wire bar_0 = y<90; -wire bar_1 = y>=90 & y<180; -wire bar_2 = y>=180 & y<270; -wire bar_3 = y>=270 & y<360; -wire bar_4 = y>=360 & y<450; -wire bar_5 = y>=450 & y<540; -wire bar_6 = y>=540 & y<630; -wire bar_7 = y>=630 & y<720; - - -wire red_enable = bar_1 | bar_3 | bar_5 | bar_7; -wire green_enable = bar_2 | bar_3 | bar_6 | bar_7; -wire blue_enable = bar_4 | bar_5 | bar_6 | bar_7; - -always @(posedge clk_in) - begin - vn_out <= vn_in; - hn_out <= hn_in; - den_out <= dn_in; - if (reset) - ramp_values <= 0; - else if (pattern == 8'b0) // no pattern - begin - r_out <= r_in; - g_out <= g_in; - b_out <= b_in; - end - else if (pattern == 8'b1) // border - begin - if (dn_in && ((y == 12'b0) || (x == 12'b0) || (x == total_active_pix - 1) || (y == total_active_lines - 1))) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else // Double-border (OzOnE)... - if (dn_in && ((y == 12'b0+20) || (x == 12'b0+20) || (x == total_active_pix - 1 - 20) || (y == total_active_lines - 1 - 20))) - begin - r_out <= 8'hD0; - g_out <= 8'hB0; - b_out <= 8'hB0; - end - else - begin - r_out <= r_in; - g_out <= g_in; - b_out <= b_in; - end - end - else if (pattern == 8'd2) // moireX - begin - if ((dn_in) && x[0] == 1'b1) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else - begin - r_out <= 8'b0; - g_out <= 8'b0; - b_out <= 8'b0; - end - end - else if (pattern == 8'd3) // moireY - begin - if ((dn_in) && y[0] == 1'b1) - begin - r_out <= 8'hFF; - g_out <= 8'hFF; - b_out <= 8'hFF; - end - else - begin - r_out <= 8'b0; - g_out <= 8'b0; - b_out <= 8'b0; - end - end - else if (pattern == 8'd4) // Simple RAMP - begin - r_out <= (red_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - g_out <= (green_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - b_out <= (blue_enable) ? ramp_values[B+FRACTIONAL_BITS-1:FRACTIONAL_BITS] : 8'h00; - - if ((x == total_active_pix - 1) && (dn_in)) - ramp_values <= 0; - else if ((x == 0) && (dn_in)) - ramp_values <= ramp_step; - else if (dn_in) - ramp_values <= ramp_values + ramp_step; - end -end - -endmodule diff --git a/sys/pll.13.qip b/sys/pll.13.qip new file mode 100644 index 0000000..a6a1dca --- /dev/null +++ b/sys/pll.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll" -library "pll" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll" -name MISC_FILE [file join $::quartus(qip_path) "pll.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll" -name VERILOG_FILE rtl/pll.v +set_global_assignment -library "pll" -name VERILOG_FILE rtl/pll/pll_0002.v + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_0002" -library "pll" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.13.qip b/sys/pll_audio.13.qip new file mode 100644 index 0000000..e987931 --- /dev/null +++ b/sys/pll_audio.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_audio" -name MISC_FILE [file join $::quartus(qip_path) "pll_audio.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio.v"] +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.v"] + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.qip b/sys/pll_audio.qip new file mode 100644 index 0000000..abb013b --- /dev/null +++ b/sys/pll_audio.qip @@ -0,0 +1,337 @@ +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_audio" -name MISC_FILE [file join $::quartus(qip_path) "pll_audio.cmp"] +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_NAME "cGxsX2F1ZGlv" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_audio" -library "pll_audio" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_NAME "cGxsX2F1ZGlvXzAwMDI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGVidWdfcHJpbnRfb3V0cHV0::ZmFsc2U=::ZGVidWdfcHJpbnRfb3V0cHV0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k::ZmFsc2U=::ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZGV2aWNl::NUNFQkEyRjE3QTc=::ZGV2aWNl" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9tb2Rl::RnJhY3Rpb25hbC1OIFBMTA==::UExMIE1vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==::dHJ1ZQ==::ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmVyZW5jZV9jbG9ja19mcmVxdWVuY3k=::NTAuMA==::UmVmZXJlbmNlIENsb2NrIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==::NTAuMCBNSHo=::cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2NoYW5uZWxfc3BhY2luZw==::MC4w::Q2hhbm5lbCBTcGFjaW5n" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX29wZXJhdGlvbl9tb2Rl::ZGlyZWN0::T3BlcmF0aW9uIE1vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZlZWRiYWNrX2Nsb2Nr::R2xvYmFsIENsb2Nr::RmVlZGJhY2sgQ2xvY2s=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWN0aW9uYWxfY291dA==::MzI=::RnJhY3Rpb25hbCBjYXJyeSBvdXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::RFNNIE9yZGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::ZGlyZWN0::b3BlcmF0aW9uX21vZGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::ZmFsc2U=::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::MQ==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::MQ==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MjQuNTc2::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::OA==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MTUyODMyMTE2Mw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::MTc=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzA=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDA=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUw::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kx::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Ix::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUx::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjI=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3ky::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzI=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iy::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjI=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mg==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mg==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzI=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDI=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUy::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjM=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kz::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzM=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iz::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjM=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzM=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDM=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUz::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjQ=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k0::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzQ=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I0::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjQ=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzQ=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDQ=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU0::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjU=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k1::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzU=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I1::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjU=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzU=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDU=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU1::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjY=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k2::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzY=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I2::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjY=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Ng==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Ng==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzY=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDY=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU2::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjc=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k3::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzc=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I3::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjc=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Nw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Nw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzc=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDc=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU3::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjg=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k4::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzg=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I4::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjg=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzg=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDg=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU4::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjk=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k5::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzk=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I5::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjk=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzk=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDk=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU5::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEw::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEw::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEw::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTA=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTA=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTA=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTA=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEw::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEw::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEx::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEx::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEx::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTE=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTE=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTE=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTE=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEx::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEx::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEy::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEy::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEy::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTI=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTI=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTI=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTI=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEy::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEy::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEz::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEz::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEz::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTM=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTM=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTM=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTM=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEz::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEz::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE0::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE0::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE0::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTQ=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTQ=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTQ=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTQ=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE0::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE0::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE1::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE1::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE1::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTU=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTU=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTU=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTU=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE1::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE1::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE2::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE2::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE2::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTY=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTY=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTY=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTY=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE2::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE2::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE3::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE3::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE3::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTc=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTc=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTc=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTc=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MjQuNTc2MDAwIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::MCBwcw==::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTI=::NTA=::ZHV0eV9jeWNsZTI=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQz::MCBwcw==::cGhhc2Vfc2hpZnQz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTM=::NTA=::ZHV0eV9jeWNsZTM=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ0::MCBwcw==::cGhhc2Vfc2hpZnQ0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTQ=::NTA=::ZHV0eV9jeWNsZTQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ1::MCBwcw==::cGhhc2Vfc2hpZnQ1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTU=::NTA=::ZHV0eV9jeWNsZTU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ2::MCBwcw==::cGhhc2Vfc2hpZnQ2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTY=::NTA=::ZHV0eV9jeWNsZTY=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ3::MCBwcw==::cGhhc2Vfc2hpZnQ3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTc=::NTA=::ZHV0eV9jeWNsZTc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ4::MCBwcw==::cGhhc2Vfc2hpZnQ4" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTg=::NTA=::ZHV0eV9jeWNsZTg=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ5::MCBwcw==::cGhhc2Vfc2hpZnQ5" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTk=::NTA=::ZHV0eV9jeWNsZTk=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMA==::MCBwcw==::cGhhc2Vfc2hpZnQxMA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEw::NTA=::ZHV0eV9jeWNsZTEw" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMQ==::MCBwcw==::cGhhc2Vfc2hpZnQxMQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEx::NTA=::ZHV0eV9jeWNsZTEx" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMg==::MCBwcw==::cGhhc2Vfc2hpZnQxMg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEy::NTA=::ZHV0eV9jeWNsZTEy" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMw==::MCBwcw==::cGhhc2Vfc2hpZnQxMw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEz::NTA=::ZHV0eV9jeWNsZTEz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNA==::MCBwcw==::cGhhc2Vfc2hpZnQxNA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE0::NTA=::ZHV0eV9jeWNsZTE0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNQ==::MCBwcw==::cGhhc2Vfc2hpZnQxNQ==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE1::NTA=::ZHV0eV9jeWNsZTE1" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNg==::MCBwcw==::cGhhc2Vfc2hpZnQxNg==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE2::NTA=::ZHV0eV9jeWNsZTE2" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNw==::MCBwcw==::cGhhc2Vfc2hpZnQxNw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE3::NTA=::ZHV0eV9jeWNsZTE3" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9hdXRvX3Jlc2V0::T24=::UExMIEF1dG8gUmVzZXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9iYW5kd2lkdGhfcHJlc2V0::QXV0bw==::UExMIEJhbmR3aWR0aCBQcmVzZXQ=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3JlY29uZg==::ZmFsc2U=::RW5hYmxlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIFBMTA==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Rwc19wb3J0cw==::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBkeW5hbWljIHBoYXNlIHNoaWZ0IHBvcnRz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NCw0LDI1NiwyNTYsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSw5LDgsMSwwLHBoX211eF9jbGssZmFsc2UsdHJ1ZSwyLDIwLDQwMDAsNDE3Ljc5MiBNSHosMTUyODMyMTE2Myxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLHRydWU=::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19udW0=::MQ==::TnVtYmVyIG9mIER5bmFtaWMgUGhhc2UgU2hpZnRz" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19kaXI=::UG9zaXRpdmU=::RHluYW1pYyBQaGFzZSBTaGlmdCBEaXJlY3Rpb24=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmNsa19zd2l0Y2g=::ZmFsc2U=::Q3JlYXRlIGEgc2Vjb25kIGlucHV0IGNsayAncmVmY2xrMSc=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX291dA==::ZmFsc2U=::Q3JlYXRlIGEgJ2Nhc2NhZGVfb3V0JyBzaWduYWwgdG8gY29ubmVjdCB3aXRoIGEgZG93bnN0cmVhbSBQTEw=" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX2lu::ZmFsc2U=::Q3JlYXRlIGFuIGFkanBsbGluIG9yIGNjbGsgc2lnbmFsIHRvIGNvbm5lY3Qgd2l0aCBhbiB1cHN0cmVhbSBQTEw=" + +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio.v"] +set_global_assignment -library "pll_audio" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.v"] +set_global_assignment -library "pll_audio" -name QIP_FILE [file join $::quartus(qip_path) "pll_audio/pll_audio_0002.qip"] + +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_audio_0002" -library "pll_audio" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_audio.v b/sys/pll_audio.v new file mode 100644 index 0000000..e96b248 --- /dev/null +++ b/sys/pll_audio.v @@ -0,0 +1,252 @@ +// megafunction wizard: %Altera PLL v17.0% +// GENERATION: XML +// pll_audio.v + +// Generated using ACDS version 17.0 602 + +`timescale 1 ps / 1 ps +module pll_audio ( + input wire refclk, // refclk.clk + input wire rst, // reset.reset + output wire outclk_0 // outclk0.clk + ); + + pll_audio_0002 pll_audio_inst ( + .refclk (refclk), // refclk.clk + .rst (rst), // reset.reset + .outclk_0 (outclk_0), // outclk0.clk + .locked () // (terminated) + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : pll_audio.vo +// RELATED_FILES: pll_audio.v, pll_audio_0002.v diff --git a/sys/pll_audio/pll_audio_0002.qip b/sys/pll_audio/pll_audio_0002.qip new file mode 100644 index 0000000..dadd4b8 --- /dev/null +++ b/sys/pll_audio/pll_audio_0002.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_audio_0002*|altera_pll:altera_pll_i*|*" diff --git a/sys/pll_audio/pll_audio_0002.v b/sys/pll_audio/pll_audio_0002.v new file mode 100644 index 0000000..37eea13 --- /dev/null +++ b/sys/pll_audio/pll_audio_0002.v @@ -0,0 +1,87 @@ +`timescale 1ns/10ps +module pll_audio_0002( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("50.0 MHz"), + .operation_mode("direct"), + .number_of_clocks(1), + .output_clock_frequency0("24.576000 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("0 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("0 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("0 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("0 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/sys/pll_cfg.qip b/sys/pll_cfg.qip new file mode 100644 index 0000000..c3394be --- /dev/null +++ b/sys/pll_cfg.qip @@ -0,0 +1,44 @@ +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_cfg" -name MISC_FILE [file join $::quartus(qip_path) "pll_cfg.cmp"] +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_NAME "cGxsX2hkbWlfY2Zn" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" +set_global_assignment -entity "pll_cfg" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_NAME "YWx0ZXJhX3BsbF9yZWNvbmZpZ190b3A=" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTCBSZWNvbmZpZw==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIFJlY29uZmlndXJhdGlvbiBCbG9jayhBTFRFUkFfUExMX1JFQ09ORklHKQ==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "ZGV2aWNlX2ZhbWlseQ==::Q3ljbG9uZSBW::ZGV2aWNlX2ZhbWlseQ==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX01JRg==::ZmFsc2U=::RW5hYmxlIE1JRiBTdHJlYW1pbmc=" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0JZVEVFTkFCTEU=::ZmFsc2U=::QWRkIGJ5dGVlbmFibGUgcG9ydA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "QllURUVOQUJMRV9XSURUSA==::NA==::QllURUVOQUJMRV9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfQUREUl9XSURUSA==::Ng==::UkVDT05GSUdfQUREUl9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "UkVDT05GSUdfREFUQV9XSURUSA==::MzI=::UkVDT05GSUdfREFUQV9XSURUSA==" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "cmVjb25mX3dpZHRo::NjQ=::cmVjb25mX3dpZHRo" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_COMPONENT_PARAMETER "V0FJVF9GT1JfTE9DSw==::dHJ1ZQ==::V0FJVF9GT1JfTE9DSw==" + +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg.v"] +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg/altera_pll_reconfig_top.v"] +set_global_assignment -library "pll_cfg" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_cfg/altera_pll_reconfig_core.v"] + +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_NAME "altera_pll_reconfig" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "altera_pll_reconfig_top" -library "pll_cfg" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_cfg.v b/sys/pll_cfg.v new file mode 100644 index 0000000..2a2f078 --- /dev/null +++ b/sys/pll_cfg.v @@ -0,0 +1,86 @@ +// megafunction wizard: %Altera PLL Reconfig v17.0% +// GENERATION: XML +// pll_cfg.v + +// Generated using ACDS version 17.0 598 + +`timescale 1 ps / 1 ps +module pll_cfg #( + parameter ENABLE_BYTEENABLE = 0, + parameter BYTEENABLE_WIDTH = 4, + parameter RECONFIG_ADDR_WIDTH = 6, + parameter RECONFIG_DATA_WIDTH = 32, + parameter reconf_width = 64, + parameter WAIT_FOR_LOCK = 1 + ) ( + input wire mgmt_clk, // mgmt_clk.clk + input wire mgmt_reset, // mgmt_reset.reset + output wire mgmt_waitrequest, // mgmt_avalon_slave.waitrequest + input wire mgmt_read, // .read + input wire mgmt_write, // .write + output wire [31:0] mgmt_readdata, // .readdata + input wire [5:0] mgmt_address, // .address + input wire [31:0] mgmt_writedata, // .writedata + output wire [63:0] reconfig_to_pll, // reconfig_to_pll.reconfig_to_pll + input wire [63:0] reconfig_from_pll // reconfig_from_pll.reconfig_from_pll + ); + + altera_pll_reconfig_top #( + .device_family ("Cyclone V"), + .ENABLE_MIF (0), + .MIF_FILE_NAME ("sys/pll_cfg.mif"), + .ENABLE_BYTEENABLE (ENABLE_BYTEENABLE), + .BYTEENABLE_WIDTH (BYTEENABLE_WIDTH), + .RECONFIG_ADDR_WIDTH (RECONFIG_ADDR_WIDTH), + .RECONFIG_DATA_WIDTH (RECONFIG_DATA_WIDTH), + .reconf_width (reconf_width), + .WAIT_FOR_LOCK (WAIT_FOR_LOCK) + ) pll_cfg_inst ( + .mgmt_clk (mgmt_clk), // mgmt_clk.clk + .mgmt_reset (mgmt_reset), // mgmt_reset.reset + .mgmt_waitrequest (mgmt_waitrequest), // mgmt_avalon_slave.waitrequest + .mgmt_read (mgmt_read), // .read + .mgmt_write (mgmt_write), // .write + .mgmt_readdata (mgmt_readdata), // .readdata + .mgmt_address (mgmt_address), // .address + .mgmt_writedata (mgmt_writedata), // .writedata + .reconfig_to_pll (reconfig_to_pll), // reconfig_to_pll.reconfig_to_pll + .reconfig_from_pll (reconfig_from_pll), // reconfig_from_pll.reconfig_from_pll + .mgmt_byteenable (4'b0000) // (terminated) + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : pll_cfg.vo +// RELATED_FILES: pll_cfg.v, altera_pll_reconfig_top.v, altera_pll_reconfig_core.v, altera_std_synchronizer.v diff --git a/sys/pll_cfg/altera_pll_reconfig_core.v b/sys/pll_cfg/altera_pll_reconfig_core.v new file mode 100644 index 0000000..d06a746 --- /dev/null +++ b/sys/pll_cfg/altera_pll_reconfig_core.v @@ -0,0 +1,2184 @@ +// (C) 2001-2017 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +`timescale 1ps/1ps + +module altera_pll_reconfig_core +#( + parameter reconf_width = 64, + parameter device_family = "Stratix V", + // MIF Streaming parameters + parameter RECONFIG_ADDR_WIDTH = 6, + parameter RECONFIG_DATA_WIDTH = 32, + parameter ROM_ADDR_WIDTH = 9, + parameter ROM_DATA_WIDTH = 32, + parameter ROM_NUM_WORDS = 512 +) ( + + //input + input wire mgmt_clk, + input wire mgmt_reset, + + + //conduits + output wire [reconf_width-1:0] reconfig_to_pll, + input wire [reconf_width-1:0] reconfig_from_pll, + + // user data (avalon-MM slave interface) + output wire [31:0] mgmt_readdata, + output wire mgmt_waitrequest, + input wire [5:0] mgmt_address, + input wire mgmt_read, + input wire mgmt_write, + input wire [31:0] mgmt_writedata, + + //other + output wire mif_start_out, + output reg [ROM_ADDR_WIDTH-1:0] mif_base_addr +); + localparam mode_WR = 1'b0; + localparam mode_POLL = 1'b1; + localparam MODE_REG = 6'b000000; + localparam STATUS_REG = 6'b000001; + localparam START_REG = 6'b000010; + localparam N_REG = 6'b000011; + localparam M_REG = 6'b000100; + localparam C_COUNTERS_REG = 6'b000101; + localparam DPS_REG = 6'b000110; + localparam DSM_REG = 6'b000111; + localparam BWCTRL_REG = 6'b001000; + localparam CP_CURRENT_REG = 6'b001001; + localparam ANY_DPRIO = 6'b100000; + localparam CNT_BASE = 5'b001010; + localparam VCO_REG = 6'b011100; + localparam MIF_REG = 6'b011111; + + //C Counters + localparam number_of_counters = 5'd18; + localparam CNT_0 = 1'd0, CNT_1 = 5'd1, CNT_2 = 5'd2, + CNT_3 = 5'd3, CNT_4 = 5'd4, CNT_5 = 5'd5, + CNT_6 = 5'd6, CNT_7 = 5'd7, CNT_8 = 5'd8, + CNT_9 = 5'd9, CNT_10 = 5'd10, CNT_11 = 5'd11, + CNT_12 = 5'd12, CNT_13 = 5'd13, CNT_14 = 5'd14, + CNT_15 = 5'd15, CNT_16 = 5'd16, CNT_17 = 5'd17; + //C counter addresses + localparam C_CNT_0_DIV_ADDR = 5'h00; + localparam C_CNT_0_DIV_ADDR_DPRIO_1 = 5'h11; + localparam C_CNT_0_3_BYPASS_EN_ADDR = 5'h15; + localparam C_CNT_0_3_ODD_DIV_EN_ADDR = 5'h17; + localparam C_CNT_4_17_BYPASS_EN_ADDR = 5'h14; + localparam C_CNT_4_17_ODD_DIV_EN_ADDR = 5'h16; + //N counter addresses + localparam N_CNT_DIV_ADDR = 5'h13; + localparam N_CNT_BYPASS_EN_ADDR = 5'h15; + localparam N_CNT_ODD_DIV_EN_ADDR = 5'h17; + //M counter addresses + localparam M_CNT_DIV_ADDR = 5'h12; + localparam M_CNT_BYPASS_EN_ADDR = 5'h15; + localparam M_CNT_ODD_DIV_EN_ADDR = 5'h17; + + //DSM address + localparam DSM_K_FRACTIONAL_DIVISION_ADDR_0 = 5'h18; + localparam DSM_K_FRACTIONAL_DIVISION_ADDR_1 = 5'h19; + localparam DSM_K_READY_ADDR = 5'h17; + localparam DSM_K_DITHER_ADDR = 5'h17; + localparam DSM_OUT_SEL_ADDR = 6'h30; + + //Other DSM params + localparam DSM_K_READY_BIT_INDEX = 4'd11; + //BWCTRL address + //Bit 0-3 of addr + localparam BWCTRL_ADDR = 6'h30; + //CP_CURRENT address + //Bit 0-2 of addr + localparam CP_CURRENT_ADDR = 6'h31; + + // VCODIV address + localparam VCO_ADDR = 5'h17; + + localparam DPRIO_IDLE = 3'd0, ONE = 3'd1, TWO = 3'd2, THREE = 3'd3, FOUR = 3'd4, + FIVE = 3'd5, SIX = 3'd6, SEVEN = 3'd7, EIGHT = 4'd8, NINE = 4'd9, TEN = 4'd10, + ELEVEN = 4'd11, TWELVE = 4'd12, THIRTEEN = 4'd13, FOURTEEN = 4'd14, DPRIO_DONE = 4'd15; + localparam IDLE = 2'b00, WAIT_ON_LOCK = 2'b01, LOCKED = 2'b10; + + wire clk; + wire reset; + wire gnd; + + wire [5: 0] slave_address; + wire slave_read; + wire slave_write; + wire [31: 0] slave_writedata; + + reg [31: 0] slave_readdata_d; + reg [31: 0] slave_readdata_q; + wire slave_waitrequest; + reg slave_mode; + + assign clk = mgmt_clk; + + assign slave_address = mgmt_address; + assign slave_read = mgmt_read; + assign slave_write = mgmt_write; + assign slave_writedata = mgmt_writedata; + + reg read_waitrequest; + // Outputs + assign mgmt_readdata = slave_readdata_q; + assign mgmt_waitrequest = slave_waitrequest | read_waitrequest; //Read waitrequest asserted in polling mode + + //internal signals + wire locked_orig; + wire locked; + + wire pll_start; + wire pll_start_valid; + reg status_read; + wire read_slave_mode_asserted; + + wire pll_start_asserted; + + reg [1:0] current_state; + reg [1:0] next_state; + + reg status;//0=busy, 1=ready + //user_mode_init user_mode_init_inst (clk, reset, dprio_mdio_dis, ser_shift_load); + //declaring the init wires. These will have 0 on them for 64 clk cycles + wire [ 5:0] init_dprio_address; + wire init_dprio_read; + wire [ 1:0] init_dprio_byteen; + wire init_dprio_write; + wire [15:0] init_dprio_writedata; + + wire init_atpgmode; + wire init_mdio_dis; + wire init_scanen; + wire init_ser_shift_load; + wire dprio_init_done; + + //DPRIO output signals after initialization is done + wire dprio_clk; + reg avmm_dprio_write; + reg avmm_dprio_read; + reg [5:0] avmm_dprio_address; + reg [15:0] avmm_dprio_writedata; + reg [1:0] avmm_dprio_byteen; + wire avmm_atpgmode; + wire avmm_mdio_dis; + wire avmm_scanen; + + //Final output wires that are muxed between the init and avmm wires. + wire dprio_init_reset; + wire [5:0] dprio_address /*synthesis keep*/; + wire dprio_read/*synthesis keep*/; + wire [1:0] dprio_byteen/*synthesis keep*/; + wire dprio_write/*synthesis keep*/; + wire [15:0] dprio_writedata/*synthesis keep*/; + wire dprio_mdio_dis/*synthesis keep*/; + wire dprio_ser_shift_load/*synthesis keep*/; + wire dprio_atpgmode/*synthesis keep*/; + wire dprio_scanen/*synthesis keep*/; + + + //other PLL signals for dyn ph shift + wire phase_done/*synthesis keep*/; + wire phase_en/*synthesis keep*/; + wire up_dn/*synthesis keep*/; + wire [4:0] cnt_sel; + + //DPRIO input signals + wire [15:0] dprio_readdata; + + //internal logic signals + //storage registers for user sent data + reg dprio_temp_read_1; + reg dprio_temp_read_2; + reg dprio_start; + reg mif_start_assert; + reg dps_start_assert; + wire usr_valid_changes; + reg [3:0] dprio_cur_state; + reg [3:0] dprio_next_state; + reg [15:0] dprio_temp_m_n_c_readdata_1_d; + reg [15:0] dprio_temp_m_n_c_readdata_2_d; + reg [15:0] dprio_temp_m_n_c_readdata_1_q; + reg [15:0] dprio_temp_m_n_c_readdata_2_q; + reg dprio_write_done; + //C counters signals + reg [7:0] usr_c_cnt_lo; + reg [7:0] usr_c_cnt_hi; + reg usr_c_cnt_bypass_en; + reg usr_c_cnt_odd_duty_div_en; + reg [7:0] temp_c_cnt_lo [0:17]; + reg [7:0] temp_c_cnt_hi [0:17]; + reg temp_c_cnt_bypass_en [0:17]; + reg temp_c_cnt_odd_duty_div_en [0:17]; + reg any_c_cnt_changed; + reg all_c_cnt_done_q; + reg all_c_cnt_done_d; + reg [17:0] c_cnt_changed; + reg [17:0] c_cnt_done_d; + reg [17:0] c_cnt_done_q; + //N counter signals + reg [7:0] usr_n_cnt_lo; + reg [7:0] usr_n_cnt_hi; + reg usr_n_cnt_bypass_en; + reg usr_n_cnt_odd_duty_div_en; + reg n_cnt_changed; + reg n_cnt_done_d; + reg n_cnt_done_q; + //M counter signals + reg [7:0] usr_m_cnt_lo; + reg [7:0] usr_m_cnt_hi; + reg usr_m_cnt_bypass_en; + reg usr_m_cnt_odd_duty_div_en; + reg m_cnt_changed; + reg m_cnt_done_d; + reg m_cnt_done_q; + //dyn phase regs + reg [15:0] usr_num_shifts; + reg [4:0] usr_cnt_sel /*synthesis preserve*/; + reg usr_up_dn; + reg dps_changed; + wire dps_changed_valid; + wire dps_done; + + //DSM Signals + reg [31:0] usr_k_value; + reg dsm_k_changed; + reg dsm_k_done_d; + reg dsm_k_done_q; + reg dsm_k_ready_false_done_d; + //BW signals + reg [3:0] usr_bwctrl_value; + reg bwctrl_changed; + reg bwctrl_done_d; + reg bwctrl_done_q; + //CP signals + reg [2:0] usr_cp_current_value; + reg cp_current_changed; + reg cp_current_done_d; + reg cp_current_done_q; + //VCO signals + reg usr_vco_value; + reg vco_changed; + reg vco_done_d; + reg vco_done_q; + //Manual DPRIO signals + reg manual_dprio_done_q; + reg manual_dprio_done_d; + reg manual_dprio_changed; + reg [5:0] usr_dprio_address; + reg [15:0] usr_dprio_writedata_0; + reg usr_r_w; + //keeping track of which operation happened last + reg [5:0] operation_address; + // Address wires for all C_counter DPRIO registers + // These are outputs of LUTS, changing depending + // on whether PLL_0 or PLL_1 being used + + + //Fitter will tell if FPLL1 is being used + wire fpll_1; + + // other + reg mif_reg_asserted; + // MAIN FSM + + // Synchronize locked signal + altera_std_synchronizer #( + .depth(3) + ) altera_std_synchronizer_inst ( + .clk(mgmt_clk), + .reset_n(~mgmt_reset), + .din(locked_orig), + .dout(locked) + ); + + always @(posedge clk) + begin + if (reset) + begin + dprio_cur_state <= DPRIO_IDLE; + current_state <= IDLE; + end + else + begin + current_state <= next_state; + dprio_cur_state <= dprio_next_state; + end + end + + always @(*) + begin + case(current_state) + IDLE: + begin + if (pll_start & !slave_waitrequest & usr_valid_changes) + next_state = WAIT_ON_LOCK; + else + next_state = IDLE; + end + WAIT_ON_LOCK: + begin + if (locked & dps_done & dprio_write_done) // received locked high from PLL + begin + if (slave_mode==mode_WR) //if the mode is waitrequest, then + // goto IDLE state directly + next_state = IDLE; + else + next_state = LOCKED; //otherwise go the locked state + end + else + next_state = WAIT_ON_LOCK; + end + + LOCKED: + begin + if (status_read) // stay in LOCKED until user reads status + next_state = IDLE; + else + next_state = LOCKED; + end + + default: next_state = 2'bxx; + + endcase + end + + + // ask the pll to start reconfig + assign pll_start = (pll_start_asserted & (current_state==IDLE)) ; + assign pll_start_valid = (pll_start & (next_state==WAIT_ON_LOCK)) ; + + + + // WRITE OPERATIONS + assign pll_start_asserted = slave_write & (slave_address == START_REG); + assign mif_start_out = pll_start & mif_reg_asserted; + + //reading the mode register to determine what mode the slave will operate + //in. + always @(posedge clk) + begin + if (reset) + slave_mode <= mode_WR; + else if (slave_write & (slave_address == MODE_REG) & !slave_waitrequest) + slave_mode <= slave_writedata[0]; + end + + //record which values user wants to change. + + //reading in the actual values that need to be reconfigged and sending + //them to the PLL + always @(posedge clk) + begin + if (reset) + begin + //reset all regs here + //BW signals reset + usr_bwctrl_value <= 0; + bwctrl_changed <= 0; + bwctrl_done_q <= 0; + //CP signals reset + usr_cp_current_value <= 0; + cp_current_changed <= 0; + cp_current_done_q <= 0; + //VCO signals reset + usr_vco_value <= 0; + vco_changed <= 0; + vco_done_q <= 0; + //DSM signals reset + usr_k_value <= 0; + dsm_k_changed <= 0; + dsm_k_done_q <= 0; + //N counter signals reset + usr_n_cnt_lo <= 0; + usr_n_cnt_hi <= 0; + usr_n_cnt_bypass_en <= 0; + usr_n_cnt_odd_duty_div_en <= 0; + n_cnt_changed <= 0; + n_cnt_done_q <= 0; + //M counter signals reset + usr_m_cnt_lo <= 0; + usr_m_cnt_hi <= 0; + usr_m_cnt_bypass_en <= 0; + usr_m_cnt_odd_duty_div_en <= 0; + m_cnt_changed <= 0; + m_cnt_done_q <= 0; + //C counter signals reset + usr_c_cnt_lo <= 0; + usr_c_cnt_hi <= 0; + usr_c_cnt_bypass_en <= 0; + usr_c_cnt_odd_duty_div_en <= 0; + any_c_cnt_changed <= 0; + all_c_cnt_done_q <= 0; + c_cnt_done_q <= 0; + //generic signals + dprio_start <= 0; + mif_start_assert <= 0; + dps_start_assert <= 0; + dprio_temp_m_n_c_readdata_1_q <= 0; + dprio_temp_m_n_c_readdata_2_q <= 0; + c_cnt_done_q <= 0; + //DPS signals + usr_up_dn <= 0; + usr_cnt_sel <= 0; + usr_num_shifts <= 0; + dps_changed <= 0; + //manual DPRIO signals + manual_dprio_changed <= 0; + usr_dprio_address <= 0; + usr_dprio_writedata_0 <= 0; + usr_r_w <= 0; + operation_address <= 0; + mif_reg_asserted <= 0; + mif_base_addr <= 0; + end + else + begin + if (dprio_temp_read_1) + begin + dprio_temp_m_n_c_readdata_1_q <= dprio_temp_m_n_c_readdata_1_d; + end + if (dprio_temp_read_2) + begin + dprio_temp_m_n_c_readdata_2_q <= dprio_temp_m_n_c_readdata_2_d; + end + if ((dps_done)) dps_changed <= 0; + if (dsm_k_done_d) dsm_k_done_q <= dsm_k_done_d; + if (n_cnt_done_d) n_cnt_done_q <= n_cnt_done_d; + if (m_cnt_done_d) m_cnt_done_q <= m_cnt_done_d; + if (all_c_cnt_done_d) all_c_cnt_done_q <= all_c_cnt_done_d; + if (c_cnt_done_d != 0) c_cnt_done_q <= c_cnt_done_q | c_cnt_done_d; + if (bwctrl_done_d) bwctrl_done_q <= bwctrl_done_d; + if (cp_current_done_d) cp_current_done_q <= cp_current_done_d; + if (vco_done_d) vco_done_q <= vco_done_d; + if (manual_dprio_done_d) manual_dprio_done_q <= manual_dprio_done_d; + + if (mif_start_out == 1'b1) + mif_start_assert <= 0; // Signaled MIF block to start, so deassert on next cycle + + if (dps_done != 1'b1) + dps_start_assert <= 0; // DPS has started, so dessert its start signal on next cycle + + if (dprio_next_state == ONE) + dprio_start <= 0; + if (dprio_write_done) + begin + bwctrl_done_q <= 0; + cp_current_done_q <= 0; + vco_done_q <= 0; + dsm_k_done_q <= 0; + dsm_k_done_q <= 0; + n_cnt_done_q <= 0; + m_cnt_done_q <= 0; + all_c_cnt_done_q <= 0; + c_cnt_done_q <= 0; + dsm_k_changed <= 0; + n_cnt_changed <= 0; + m_cnt_changed <= 0; + any_c_cnt_changed <= 0; + bwctrl_changed <= 0; + cp_current_changed <= 0; + vco_changed <= 0; + manual_dprio_changed <= 0; + manual_dprio_done_q <= 0; + if (dps_changed | dps_changed_valid | !dps_done ) + begin + usr_cnt_sel <= usr_cnt_sel; + end + else + begin + usr_cnt_sel <= 0; + end + mif_reg_asserted <= 0; + end + else + begin + dsm_k_changed <= dsm_k_changed; + n_cnt_changed <= n_cnt_changed; + m_cnt_changed <= m_cnt_changed; + any_c_cnt_changed <= any_c_cnt_changed; + manual_dprio_changed <= manual_dprio_changed; + mif_reg_asserted <= mif_reg_asserted; + usr_cnt_sel <= usr_cnt_sel; + end + + + if(slave_write & !slave_waitrequest) + begin + case(slave_address) + //read in the values here from the user and act on them + DSM_REG: + begin + operation_address <= DSM_REG; + usr_k_value <= slave_writedata[31:0]; + dsm_k_changed <= 1'b1; + dsm_k_done_q <= 0; + dprio_start <= 1'b1; + end + N_REG: + begin + operation_address <= N_REG; + usr_n_cnt_lo <= slave_writedata[7:0]; + usr_n_cnt_hi <= slave_writedata[15:8]; + usr_n_cnt_bypass_en <= slave_writedata[16]; + usr_n_cnt_odd_duty_div_en <= slave_writedata[17]; + n_cnt_changed <= 1'b1; + n_cnt_done_q <= 0; + dprio_start <= 1'b1; + end + M_REG: + begin + operation_address <= M_REG; + usr_m_cnt_lo <= slave_writedata[7:0]; + usr_m_cnt_hi <= slave_writedata[15:8]; + usr_m_cnt_bypass_en <= slave_writedata[16]; + usr_m_cnt_odd_duty_div_en <= slave_writedata[17]; + m_cnt_changed <= 1'b1; + m_cnt_done_q <= 0; + dprio_start <= 1'b1; + end + DPS_REG: + begin + operation_address <= DPS_REG; + usr_num_shifts <= slave_writedata[15:0]; + usr_cnt_sel <= slave_writedata[20:16]; + usr_up_dn <= slave_writedata[21]; + dps_changed <= 1; + dps_start_assert <= 1; + end + C_COUNTERS_REG: + begin + operation_address <= C_COUNTERS_REG; + usr_c_cnt_lo <= slave_writedata[7:0]; + usr_c_cnt_hi <= slave_writedata[15:8]; + usr_c_cnt_bypass_en <= slave_writedata[16]; + usr_c_cnt_odd_duty_div_en <= slave_writedata[17]; + usr_cnt_sel <= slave_writedata[22:18]; + any_c_cnt_changed <= 1'b1; + all_c_cnt_done_q <= 0; + dprio_start <= 1'b1; + end + BWCTRL_REG: + begin + usr_bwctrl_value <= slave_writedata[3:0]; + bwctrl_changed <= 1'b1; + bwctrl_done_q <= 0; + dprio_start <= 1'b1; + operation_address <= BWCTRL_REG; + end + CP_CURRENT_REG: + begin + usr_cp_current_value <= slave_writedata[2:0]; + cp_current_changed <= 1'b1; + cp_current_done_q <= 0; + dprio_start <= 1'b1; + operation_address <= CP_CURRENT_REG; + end + VCO_REG: + begin + usr_vco_value <= slave_writedata[0]; + vco_changed <= 1'b1; + vco_done_q <= 0; + dprio_start <= 1'b1; + operation_address <= VCO_REG; + end + ANY_DPRIO: + begin + operation_address <= ANY_DPRIO; + manual_dprio_changed <= 1'b1; + usr_dprio_address <= slave_writedata[5:0]; + usr_dprio_writedata_0 <= slave_writedata[21:6]; + usr_r_w <= slave_writedata[22]; + manual_dprio_done_q <= 0; + dprio_start <= 1'b1; + end + MIF_REG: + begin + mif_reg_asserted <= 1'b1; + mif_base_addr <= slave_writedata[ROM_ADDR_WIDTH-1:0]; + mif_start_assert <= 1'b1; + end + endcase + end + end + end + //C Counter assigning values to the 2-d array of values for each C counter + + reg [4:0] j; + always @(posedge clk) + begin + + if (reset) + begin + c_cnt_changed[17:0] <= 0; + for (j = 0; j < number_of_counters; j = j + 1'b1) + begin : c_cnt_reset + temp_c_cnt_bypass_en[j] <= 0; + temp_c_cnt_odd_duty_div_en[j] <= 0; + temp_c_cnt_lo[j][7:0] <= 0; + temp_c_cnt_hi[j][7:0] <= 0; + end + end + else + begin + if (dprio_write_done) + begin + c_cnt_changed <= 0; + end + if (any_c_cnt_changed && (operation_address == C_COUNTERS_REG)) + begin + case (cnt_sel) + CNT_0: + begin + temp_c_cnt_lo [0] <= usr_c_cnt_lo; + temp_c_cnt_hi [0] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [0] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [0] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [0] <= 1'b1; + end + CNT_1: + begin + temp_c_cnt_lo [1] <= usr_c_cnt_lo; + temp_c_cnt_hi [1] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [1] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [1] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [1] <= 1'b1; + end + CNT_2: + begin + temp_c_cnt_lo [2] <= usr_c_cnt_lo; + temp_c_cnt_hi [2] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [2] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [2] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [2] <= 1'b1; + end + CNT_3: + begin + temp_c_cnt_lo [3] <= usr_c_cnt_lo; + temp_c_cnt_hi [3] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [3] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [3] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [3] <= 1'b1; + end + CNT_4: + begin + temp_c_cnt_lo [4] <= usr_c_cnt_lo; + temp_c_cnt_hi [4] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [4] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [4] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [4] <= 1'b1; + end + CNT_5: + begin + temp_c_cnt_lo [5] <= usr_c_cnt_lo; + temp_c_cnt_hi [5] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [5] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [5] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [5] <= 1'b1; + end + CNT_6: + begin + temp_c_cnt_lo [6] <= usr_c_cnt_lo; + temp_c_cnt_hi [6] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [6] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [6] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [6] <= 1'b1; + end + CNT_7: + begin + temp_c_cnt_lo [7] <= usr_c_cnt_lo; + temp_c_cnt_hi [7] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [7] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [7] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [7] <= 1'b1; + end + CNT_8: + begin + temp_c_cnt_lo [8] <= usr_c_cnt_lo; + temp_c_cnt_hi [8] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [8] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [8] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [8] <= 1'b1; + end + CNT_9: + begin + temp_c_cnt_lo [9] <= usr_c_cnt_lo; + temp_c_cnt_hi [9] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [9] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [9] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [9] <= 1'b1; + end + CNT_10: + begin + temp_c_cnt_lo [10] <= usr_c_cnt_lo; + temp_c_cnt_hi [10] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [10] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [10] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [10] <= 1'b1; + end + CNT_11: + begin + temp_c_cnt_lo [11] <= usr_c_cnt_lo; + temp_c_cnt_hi [11] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [11] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [11] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [11] <= 1'b1; + end + CNT_12: + begin + temp_c_cnt_lo [12] <= usr_c_cnt_lo; + temp_c_cnt_hi [12] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [12] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [12] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [12] <= 1'b1; + end + CNT_13: + begin + temp_c_cnt_lo [13] <= usr_c_cnt_lo; + temp_c_cnt_hi [13] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [13] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [13] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [13] <= 1'b1; + end + CNT_14: + begin + temp_c_cnt_lo [14] <= usr_c_cnt_lo; + temp_c_cnt_hi [14] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [14] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [14] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [14] <= 1'b1; + end + CNT_15: + begin + temp_c_cnt_lo [15] <= usr_c_cnt_lo; + temp_c_cnt_hi [15] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [15] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [15] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [15] <= 1'b1; + end + CNT_16: + begin + temp_c_cnt_lo [16] <= usr_c_cnt_lo; + temp_c_cnt_hi [16] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [16] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [16] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [16] <= 1'b1; + end + CNT_17: + begin + temp_c_cnt_lo [17] <= usr_c_cnt_lo; + temp_c_cnt_hi [17] <= usr_c_cnt_hi; + temp_c_cnt_bypass_en [17] <= usr_c_cnt_bypass_en; + temp_c_cnt_odd_duty_div_en [17] <= usr_c_cnt_odd_duty_div_en; + c_cnt_changed [17] <= 1'b1; + end + endcase + + end + end + end + + + //logic to handle which writes the user indicated and wants to start. + assign usr_valid_changes =dsm_k_changed| any_c_cnt_changed |n_cnt_changed | m_cnt_changed | dps_changed_valid |manual_dprio_changed |cp_current_changed|bwctrl_changed|vco_changed; + + + //start the reconfig operations by writing to the DPRIO + reg break_loop; + reg [4:0] i; + always @(*) + begin + dprio_temp_read_1 = 0; + dprio_temp_read_2 = 0; + dprio_temp_m_n_c_readdata_1_d = 0; + dprio_temp_m_n_c_readdata_2_d = 0; + break_loop = 0; + dprio_next_state = DPRIO_IDLE; + avmm_dprio_write = 0; + avmm_dprio_read = 0; + avmm_dprio_address = 0; + avmm_dprio_writedata = 0; + avmm_dprio_byteen = 0; + dprio_write_done = 1; + manual_dprio_done_d = 0; + n_cnt_done_d = 0; + dsm_k_done_d = 0; + dsm_k_ready_false_done_d = 0; + m_cnt_done_d = 0; + c_cnt_done_d[17:0] = 0; + all_c_cnt_done_d = 0; + bwctrl_done_d = 0; + cp_current_done_d = 0; + vco_done_d = 0; + i = 0; + + // Deassert dprio_write_done so it doesn't reset mif_reg_asserted (toggled writes) + if (dprio_start | mif_start_assert) + dprio_write_done = 0; + + if (current_state == WAIT_ON_LOCK) + begin + case (dprio_cur_state) + ONE: + begin + if (n_cnt_changed & !n_cnt_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + dprio_next_state = TWO; + avmm_dprio_address = N_CNT_DIV_ADDR; + avmm_dprio_writedata[7:0] = usr_n_cnt_lo; + avmm_dprio_writedata[15:8] = usr_n_cnt_hi; + end + else if (m_cnt_changed & !m_cnt_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + dprio_next_state = TWO; + avmm_dprio_address = M_CNT_DIV_ADDR; + avmm_dprio_writedata[7:0] = usr_m_cnt_lo; + avmm_dprio_writedata[15:8] = usr_m_cnt_hi; + end + else if (any_c_cnt_changed & !all_c_cnt_done_q) + begin + + for (i = 0; (i < number_of_counters) & !break_loop; i = i + 1'b1) + begin : c_cnt_write_hilo + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + dprio_write_done = 0; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + dprio_next_state = TWO; + if (fpll_1) avmm_dprio_address = C_CNT_0_DIV_ADDR + C_CNT_0_DIV_ADDR_DPRIO_1 - i; + else avmm_dprio_address = C_CNT_0_DIV_ADDR + i; + avmm_dprio_writedata[7:0] = temp_c_cnt_lo[i]; + avmm_dprio_writedata[15:8] = temp_c_cnt_hi[i]; + //To break from the loop, since only one counter + //is addressed at a time + break_loop = 1'b1; + end + end + end + else if (dsm_k_changed & !dsm_k_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 0; + dprio_next_state = TWO; + end + else if (bwctrl_changed & !bwctrl_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 0; + dprio_next_state = TWO; + end + else if (cp_current_changed & !cp_current_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 0; + dprio_next_state = TWO; + end + else if (vco_changed & !vco_done_q) + begin + dprio_write_done = 0; + avmm_dprio_write = 0; + dprio_next_state = TWO; + end + else if (manual_dprio_changed & !manual_dprio_done_q) + begin + dprio_write_done = 0; + avmm_dprio_byteen = 2'b11; + dprio_next_state = TWO; + avmm_dprio_write = usr_r_w; + avmm_dprio_address = usr_dprio_address; + avmm_dprio_writedata[15:0] = usr_dprio_writedata_0; + end + else dprio_next_state = DPRIO_IDLE; + end + + TWO: + begin + //handle reading the two setting bits on n_cnt, then + //writing them back while preserving other bits. + //Issue two consecutive reads then wait; readLatency=3 + dprio_write_done = 0; + dprio_next_state = THREE; + avmm_dprio_byteen = 2'b11; + avmm_dprio_read = 1'b1; + if (n_cnt_changed & !n_cnt_done_q) + begin + avmm_dprio_address = N_CNT_BYPASS_EN_ADDR; + end + else if (m_cnt_changed & !m_cnt_done_q) + begin + avmm_dprio_address = M_CNT_BYPASS_EN_ADDR; + end + + else if (any_c_cnt_changed & !all_c_cnt_done_q) + begin + for (i = 0; (i < number_of_counters) & !break_loop; i = i + 1'b1) + begin : c_cnt_read_bypass + if (fpll_1) + begin + if (i > 13) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_BYPASS_EN_ADDR; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_BYPASS_EN_ADDR; + break_loop = 1'b1; + end + end + end + else + begin + if (i < 4) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_BYPASS_EN_ADDR; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_BYPASS_EN_ADDR; + break_loop = 1'b1; + end + end + end + end + end + //reading the K ready 16 bit word. Need to write 0 to it + //afterwards to indicate that K has not been done writing + else if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_address = DSM_K_READY_ADDR; + dprio_next_state = FOUR; + end + else if (bwctrl_changed & !bwctrl_done_q) + begin + avmm_dprio_address = BWCTRL_ADDR; + dprio_next_state = FOUR; + end + else if (cp_current_changed & !cp_current_done_q) + begin + avmm_dprio_address = CP_CURRENT_ADDR; + dprio_next_state = FOUR; + end + else if (vco_changed & !vco_done_q) + begin + avmm_dprio_address = VCO_ADDR; + dprio_next_state = FOUR; + end + else if (manual_dprio_changed & !manual_dprio_done_q) + begin + avmm_dprio_read = ~usr_r_w; + avmm_dprio_address = usr_dprio_address; + dprio_next_state = DPRIO_DONE; + end + else dprio_next_state = DPRIO_IDLE; + end + THREE: + begin + dprio_write_done = 0; + avmm_dprio_byteen = 2'b11; + avmm_dprio_read = 1'b1; + dprio_next_state = FOUR; + if (n_cnt_changed & !n_cnt_done_q) + begin + avmm_dprio_address = N_CNT_ODD_DIV_EN_ADDR; + end + else if (m_cnt_changed & !m_cnt_done_q) + begin + avmm_dprio_address = M_CNT_ODD_DIV_EN_ADDR; + end + else if (any_c_cnt_changed & !all_c_cnt_done_q) + begin + for (i = 0; (i < number_of_counters) & !break_loop; i = i + 1'b1) + begin : c_cnt_read_odd_div + if (fpll_1) + begin + if (i > 13) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_ODD_DIV_EN_ADDR; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_ODD_DIV_EN_ADDR; + break_loop = 1'b1; + end + end + end + else + begin + if (i < 4) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_ODD_DIV_EN_ADDR; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_ODD_DIV_EN_ADDR; + break_loop = 1'b1; + end + end + end + end + end + else dprio_next_state = DPRIO_IDLE; + end + FOUR: + begin + dprio_temp_read_1 = 1'b1; + dprio_write_done = 0; + if (vco_changed|cp_current_changed|bwctrl_changed|dsm_k_changed|n_cnt_changed|m_cnt_changed|any_c_cnt_changed) + begin + dprio_temp_m_n_c_readdata_1_d = dprio_readdata; + dprio_next_state = FIVE; + end + else dprio_next_state = DPRIO_IDLE; + end + FIVE: + begin + dprio_write_done = 0; + dprio_temp_read_2 = 1'b1; + if (vco_changed|cp_current_changed|bwctrl_changed|dsm_k_changed|n_cnt_changed|m_cnt_changed|any_c_cnt_changed) + begin + //this is where DSM ready value comes. + //Need to store in a register to be used later + dprio_temp_m_n_c_readdata_2_d = dprio_readdata; + dprio_next_state = SIX; + end + else dprio_next_state = DPRIO_IDLE; + end + SIX: + begin + dprio_write_done = 0; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + dprio_next_state = SEVEN; + avmm_dprio_writedata = dprio_temp_m_n_c_readdata_1_q; + if (n_cnt_changed & !n_cnt_done_q) + begin + avmm_dprio_address = N_CNT_BYPASS_EN_ADDR; + avmm_dprio_writedata[5] = usr_n_cnt_bypass_en; + end + else if (m_cnt_changed & !m_cnt_done_q) + begin + avmm_dprio_address = M_CNT_BYPASS_EN_ADDR; + avmm_dprio_writedata[4] = usr_m_cnt_bypass_en; + end + else if (any_c_cnt_changed & !all_c_cnt_done_q) + begin + for (i = 0; (i < number_of_counters) & !break_loop; i = i + 1'b1) + begin : c_cnt_write_bypass + if (fpll_1) + begin + if (i > 13) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_BYPASS_EN_ADDR; + avmm_dprio_writedata[i-14] = temp_c_cnt_bypass_en[i]; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_BYPASS_EN_ADDR; + avmm_dprio_writedata[i] = temp_c_cnt_bypass_en[i]; + break_loop = 1'b1; + end + end + end + else + begin + if (i < 4) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_BYPASS_EN_ADDR; + avmm_dprio_writedata[3-i] = temp_c_cnt_bypass_en[i]; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_BYPASS_EN_ADDR; + avmm_dprio_writedata[17-i] = temp_c_cnt_bypass_en[i]; + break_loop = 1'b1; + end + end + end + end + end + else if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_write = 0; + end + else if (bwctrl_changed & !bwctrl_done_q) + begin + avmm_dprio_write = 0; + end + else if (cp_current_changed & !cp_current_done_q) + begin + avmm_dprio_write = 0; + end + else if (vco_changed & !vco_done_q) + begin + avmm_dprio_write = 0; + end + else dprio_next_state = DPRIO_IDLE; + end + SEVEN: + begin + dprio_write_done = 0; + dprio_next_state = EIGHT; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + avmm_dprio_writedata = dprio_temp_m_n_c_readdata_2_q; + if (n_cnt_changed & !n_cnt_done_q) + begin + avmm_dprio_address = N_CNT_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[5] = usr_n_cnt_odd_duty_div_en; + n_cnt_done_d = 1'b1; + end + else if (m_cnt_changed & !m_cnt_done_q) + begin + avmm_dprio_address = M_CNT_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[4] = usr_m_cnt_odd_duty_div_en; + m_cnt_done_d = 1'b1; + end + + else if (any_c_cnt_changed & !all_c_cnt_done_q) + begin + for (i = 0; (i < number_of_counters) & !break_loop; i = i + 1'b1) + begin : c_cnt_write_odd_div + if (fpll_1) + begin + if (i > 13) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[i-14] = temp_c_cnt_odd_duty_div_en[i]; + c_cnt_done_d[i] = 1'b1; + //have to OR the signals to prevent + //overwriting of previous dones + c_cnt_done_d = c_cnt_done_d | c_cnt_done_q; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[i] = temp_c_cnt_odd_duty_div_en[i]; + c_cnt_done_d[i] = 1'b1; + c_cnt_done_d = c_cnt_done_d | c_cnt_done_q; + break_loop = 1'b1; + end + end + end + else + begin + if (i < 4) + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_0_3_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[3-i] = temp_c_cnt_odd_duty_div_en[i]; + c_cnt_done_d[i] = 1'b1; + //have to OR the signals to prevent + //overwriting of previous dones + c_cnt_done_d = c_cnt_done_d | c_cnt_done_q; + break_loop = 1'b1; + end + end + else + begin + if (c_cnt_changed[i] & !c_cnt_done_q[i]) + begin + avmm_dprio_address = C_CNT_4_17_ODD_DIV_EN_ADDR; + avmm_dprio_writedata[17-i] = temp_c_cnt_odd_duty_div_en[i]; + c_cnt_done_d[i] = 1'b1; + c_cnt_done_d = c_cnt_done_d | c_cnt_done_q; + break_loop = 1'b1; + end + end + end + end + end + else if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_address = DSM_K_READY_ADDR; + avmm_dprio_writedata[DSM_K_READY_BIT_INDEX] = 1'b0; + dsm_k_ready_false_done_d = 1'b1; + end + else if (bwctrl_changed & !bwctrl_done_q) + begin + avmm_dprio_address = BWCTRL_ADDR; + avmm_dprio_writedata[3:0] = usr_bwctrl_value; + bwctrl_done_d = 1'b1; + end + else if (cp_current_changed & !cp_current_done_q) + begin + avmm_dprio_address = CP_CURRENT_ADDR; + avmm_dprio_writedata[2:0] = usr_cp_current_value; + cp_current_done_d = 1'b1; + end + else if (vco_changed & !vco_done_q) + begin + avmm_dprio_address = VCO_ADDR; + avmm_dprio_writedata[8] = usr_vco_value; + vco_done_d = 1'b1; + end + + + //if all C_cnt that were changed are done, then assert all_c_cnt_done + if (c_cnt_done_d == c_cnt_changed) + all_c_cnt_done_d = 1'b1; + if (n_cnt_changed & n_cnt_done_d) + dprio_next_state = DPRIO_DONE; + if (any_c_cnt_changed & !all_c_cnt_done_d & !all_c_cnt_done_q) + dprio_next_state = ONE; + else if (m_cnt_changed & !m_cnt_done_d & !m_cnt_done_q) + dprio_next_state = ONE; + else if (dsm_k_changed & !dsm_k_ready_false_done_d) + dprio_next_state = TWO; + else if (dsm_k_changed & !dsm_k_done_q) + dprio_next_state = EIGHT; + else if (bwctrl_changed & !bwctrl_done_d) + dprio_next_state = TWO; + else if (cp_current_changed & !cp_current_done_d) + dprio_next_state = TWO; + else if (vco_changed & !vco_done_d) + dprio_next_state = TWO; + else + begin + dprio_next_state = DPRIO_DONE; + dprio_write_done = 1'b1; + end + end + //finish the rest of the DSM reads/writes + //writing k value, writing k_ready to 1. + EIGHT: + begin + dprio_write_done = 0; + dprio_next_state = NINE; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_address = DSM_K_FRACTIONAL_DIVISION_ADDR_0; + avmm_dprio_writedata[15:0] = usr_k_value[15:0]; + end + end + NINE: + begin + dprio_write_done = 0; + dprio_next_state = TEN; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_address = DSM_K_FRACTIONAL_DIVISION_ADDR_1; + avmm_dprio_writedata[15:0] = usr_k_value[31:16]; + end + end + TEN: + begin + dprio_write_done = 0; + dprio_next_state = ONE; + avmm_dprio_write = 1'b1; + avmm_dprio_byteen = 2'b11; + if (dsm_k_changed & !dsm_k_done_q) + begin + avmm_dprio_address = DSM_K_READY_ADDR; + //already have the readdata for DSM_K_READY_ADDR since we read it + //earlier. Just reuse here + avmm_dprio_writedata = dprio_temp_m_n_c_readdata_2_q; + avmm_dprio_writedata[DSM_K_READY_BIT_INDEX] = 1'b1; + dsm_k_done_d = 1'b1; + end + end + DPRIO_DONE: + begin + dprio_write_done = 1'b1; + if (dprio_start) dprio_next_state = DPRIO_IDLE; + else dprio_next_state = DPRIO_DONE; + end + DPRIO_IDLE: + begin + if (dprio_start) dprio_next_state = ONE; + else dprio_next_state = DPRIO_IDLE; + end + default: dprio_next_state = 4'bxxxx; + endcase + end + + end + + + //assert the waitreq signal according to the state of the slave + assign slave_waitrequest = (slave_mode==mode_WR) ? ((locked === 1'b1) ? (((current_state==WAIT_ON_LOCK) & !dprio_write_done) | !dps_done |reset|!dprio_init_done) : 1'b1) : 1'b0; + + // Read operations + always @(*) + begin + status = 0; + if (slave_mode == mode_POLL) + //asserting status to 1 if the slave is done. + status = (current_state == LOCKED); + end + //************************************************************// + //************************************************************// + //******************** READ STATE MACHINE ********************// + //************************************************************// + //************************************************************// + reg [1:0] current_read_state; + reg [1:0] next_read_state; + reg [5:0] slave_address_int_d; + reg [5:0] slave_address_int_q; + reg dprio_read_1; + reg [5:0] dprio_address_1; + reg [1:0] dprio_byteen_1; + reg [4:0] usr_cnt_sel_1; + localparam READ = 2'b00, READ_WAIT = 2'b01, READ_IDLE = 2'b10, READ_POST_WAIT = 2'b11; + + always @(*) + begin + if(next_read_state == READ_IDLE) + begin + read_waitrequest <= 1'b0; + end + else + begin + read_waitrequest <= 1'b1; + end + end + + always @(posedge clk) + begin + if (reset) + begin + current_read_state <= READ_IDLE; + slave_address_int_q <= 0; + slave_readdata_q <= 0; + end + else + begin + current_read_state <= next_read_state; + slave_address_int_q <= slave_address_int_d; + slave_readdata_q <= slave_readdata_d; + end + end + always @(*) + begin + dprio_read_1 = 0; + dprio_address_1 = 0; + dprio_byteen_1 = 0; + slave_address_int_d = 0; + slave_readdata_d = 0; + status_read = 0; + usr_cnt_sel_1 = 0; + case(current_read_state) + READ_IDLE: + begin + slave_address_int_d = 0; + next_read_state = READ_IDLE; + if ((current_state != WAIT_ON_LOCK) && slave_read) + begin + slave_address_int_d = slave_address; + if ((slave_address >= CNT_BASE) && (slave_address < CNT_BASE+18)) + begin + next_read_state = READ_WAIT; + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + usr_cnt_sel_1 = (slave_address[4:0] - CNT_BASE); + if (fpll_1) dprio_address_1 = C_CNT_0_DIV_ADDR + C_CNT_0_DIV_ADDR_DPRIO_1 - cnt_sel; + else dprio_address_1 = C_CNT_0_DIV_ADDR + cnt_sel; + end + else + begin + case (slave_address) + MODE_REG: + begin + next_read_state = READ_WAIT; + slave_readdata_d = slave_mode; + end + STATUS_REG: + begin + next_read_state = READ_WAIT; + status_read = 1'b1; + slave_readdata_d = status; + end + N_REG: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + dprio_address_1 = N_CNT_DIV_ADDR; + next_read_state = READ_WAIT; + end + M_REG: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + dprio_address_1 = M_CNT_DIV_ADDR; + next_read_state = READ_WAIT; + end + BWCTRL_REG: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + dprio_address_1 = BWCTRL_ADDR; + next_read_state = READ_WAIT; + end + CP_CURRENT_REG: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + dprio_address_1 = CP_CURRENT_ADDR; + next_read_state = READ_WAIT; + end + VCO_REG: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = 1'b1; + dprio_address_1 = VCO_ADDR; + next_read_state = READ_WAIT; + end + ANY_DPRIO: + begin + dprio_byteen_1 = 2'b11; + dprio_read_1 = ~slave_writedata[22]; + dprio_address_1 = slave_writedata[5:0]; + next_read_state = READ_WAIT; + end + default : next_read_state = READ_IDLE; + endcase + end + end + else + next_read_state = READ_IDLE; + end + READ_WAIT: + begin + next_read_state = READ; + slave_address_int_d = slave_address_int_q; + case (slave_address_int_q) + MODE_REG: + begin + slave_readdata_d = slave_readdata_q; + end + STATUS_REG: + begin + slave_readdata_d = slave_readdata_q; + end + endcase + end + READ: + begin + next_read_state = READ_POST_WAIT; + slave_address_int_d = slave_address_int_q; + slave_readdata_d = dprio_readdata; + case (slave_address_int_q) + MODE_REG: + begin + slave_readdata_d = slave_readdata_q; + end + STATUS_REG: + begin + slave_readdata_d = slave_readdata_q; + end + BWCTRL_REG: + begin + slave_readdata_d = dprio_readdata[3:0]; + end + CP_CURRENT_REG: + begin + slave_readdata_d = dprio_readdata[2:0]; + end + VCO_REG: + begin + slave_readdata_d = dprio_readdata[8]; + end + ANY_DPRIO: + begin + slave_readdata_d = dprio_readdata; + end + endcase + end + READ_POST_WAIT: + begin + next_read_state = READ_IDLE; + end + default: next_read_state = 2'bxx; + endcase + end + + + dyn_phase_shift dyn_phase_shift_inst ( + .clk(clk), + .reset(reset), + .phase_done(phase_done), + .pll_start_valid(pll_start_valid), + .dps_changed(dps_changed), + .dps_changed_valid(dps_changed_valid), + .dprio_write_done(dprio_write_done), + .usr_num_shifts(usr_num_shifts), + .usr_cnt_sel(usr_cnt_sel|usr_cnt_sel_1), + .usr_up_dn(usr_up_dn), + .locked(locked), + .dps_done(dps_done), + .phase_en(phase_en), + .up_dn(up_dn), + .cnt_sel(cnt_sel)); + defparam dyn_phase_shift_inst.device_family = device_family; + + assign dprio_clk = clk; + self_reset self_reset_inst (mgmt_reset, clk, reset, dprio_init_reset); + + dprio_mux dprio_mux_inst ( + .init_dprio_address(init_dprio_address), + .init_dprio_read(init_dprio_read), + .init_dprio_byteen(init_dprio_byteen), + .init_dprio_write(init_dprio_write), + .init_dprio_writedata(init_dprio_writedata), + + + .init_atpgmode(init_atpgmode), + .init_mdio_dis(init_mdio_dis), + .init_scanen(init_scanen), + .init_ser_shift_load(init_ser_shift_load), + .dprio_init_done(dprio_init_done), + + // Inputs from avmm master + .avmm_dprio_address(avmm_dprio_address | dprio_address_1), + .avmm_dprio_read(avmm_dprio_read | dprio_read_1), + .avmm_dprio_byteen(avmm_dprio_byteen | dprio_byteen_1), + .avmm_dprio_write(avmm_dprio_write), + .avmm_dprio_writedata(avmm_dprio_writedata), + + .avmm_atpgmode(avmm_atpgmode), + .avmm_mdio_dis(avmm_mdio_dis), + .avmm_scanen(avmm_scanen), + + // Outputs to fpll + .dprio_address(dprio_address), + .dprio_read(dprio_read), + .dprio_byteen(dprio_byteen), + .dprio_write(dprio_write), + .dprio_writedata(dprio_writedata), + + .atpgmode(dprio_atpgmode), + .mdio_dis(dprio_mdio_dis), + .scanen(dprio_scanen), + .ser_shift_load(dprio_ser_shift_load) + ); + + + fpll_dprio_init fpll_dprio_init_inst ( + .clk(clk), + .reset_n(~reset), + .locked(locked), + + //outputs + .dprio_address(init_dprio_address), + .dprio_read(init_dprio_read), + .dprio_byteen(init_dprio_byteen), + .dprio_write(init_dprio_write), + .dprio_writedata(init_dprio_writedata), + + .atpgmode(init_atpgmode), + .mdio_dis(init_mdio_dis), + .scanen(init_scanen), + .ser_shift_load(init_ser_shift_load), + .dprio_init_done(dprio_init_done)); + + //address luts, to be reconfigged by the Fitter + //FPLL_1 or 0 address lut + generic_lcell_comb lcell_fpll_0_1 ( + .dataa(1'b0), + .combout (fpll_1)); + defparam lcell_fpll_0_1.lut_mask = 64'hAAAAAAAAAAAAAAAA; + defparam lcell_fpll_0_1.dont_touch = "on"; + defparam lcell_fpll_0_1.family = device_family; + + + wire dprio_read_combout; + generic_lcell_comb lcell_dprio_read ( + .dataa(fpll_1), + .datab(dprio_read), + .datac(1'b0), + .datad(1'b0), + .datae(1'b0), + .dataf(1'b0), + .combout (dprio_read_combout)); + defparam lcell_dprio_read.lut_mask = 64'hCCCCCCCCCCCCCCCC; + defparam lcell_dprio_read.dont_touch = "on"; + defparam lcell_dprio_read.family = device_family; + + + + + + //assign reconfig_to_pll signals + assign reconfig_to_pll[0] = dprio_clk; + assign reconfig_to_pll[1] = ~dprio_init_reset; + assign reconfig_to_pll[2] = dprio_write; + assign reconfig_to_pll[3] = dprio_read_combout; + assign reconfig_to_pll[9:4] = dprio_address; + assign reconfig_to_pll[25:10] = dprio_writedata; + assign reconfig_to_pll[27:26] = dprio_byteen; + assign reconfig_to_pll[28] = dprio_ser_shift_load; + assign reconfig_to_pll[29] = dprio_mdio_dis; + assign reconfig_to_pll[30] = phase_en; + assign reconfig_to_pll[31] = up_dn; + assign reconfig_to_pll[36:32] = cnt_sel; + assign reconfig_to_pll[37] = dprio_scanen; + assign reconfig_to_pll[38] = dprio_atpgmode; + //assign reconfig_to_pll[40:37] = clken; + assign reconfig_to_pll[63:39] = 0; + + //assign reconfig_from_pll signals + assign dprio_readdata = reconfig_from_pll [15:0]; + assign locked_orig = reconfig_from_pll [16]; + assign phase_done = reconfig_from_pll [17]; + +endmodule +module self_reset (input wire mgmt_reset, input wire clk, output wire reset, output wire init_reset); + + localparam RESET_COUNTER_VALUE = 3'd2; + localparam INITIAL_WAIT_VALUE = 9'd340; + reg [9:0]counter; + reg local_reset; + reg usr_mode_init_wait; + initial + begin + local_reset = 1'b1; + counter = 0; + usr_mode_init_wait = 0; + end + + always @(posedge clk) + begin + if (mgmt_reset) + begin + counter <= 0; + end + else + begin + if (!usr_mode_init_wait) + begin + if (counter == INITIAL_WAIT_VALUE) + begin + local_reset <= 0; + usr_mode_init_wait <= 1'b1; + counter <= 0; + end + else + begin + counter <= counter + 1'b1; + end + end + else + begin + if (counter == RESET_COUNTER_VALUE) + local_reset <= 0; + else + counter <= counter + 1'b1; + end + end + end + assign reset = mgmt_reset | local_reset; + assign init_reset = local_reset; +endmodule + +module dprio_mux ( + // Inputs from init block + input [ 5:0] init_dprio_address, + input init_dprio_read, + input [ 1:0] init_dprio_byteen, + input init_dprio_write, + input [15:0] init_dprio_writedata, + + input init_atpgmode, + input init_mdio_dis, + input init_scanen, + input init_ser_shift_load, + input dprio_init_done, + + // Inputs from avmm master + input [ 5:0] avmm_dprio_address, + input avmm_dprio_read, + input [ 1:0] avmm_dprio_byteen, + input avmm_dprio_write, + input [15:0] avmm_dprio_writedata, + + input avmm_atpgmode, + input avmm_mdio_dis, + input avmm_scanen, + input avmm_ser_shift_load, + + // Outputs to fpll + output [ 5:0] dprio_address, + output dprio_read, + output [ 1:0] dprio_byteen, + output dprio_write, + output [15:0] dprio_writedata, + + output atpgmode, + output mdio_dis, + output scanen, + output ser_shift_load +); + + assign dprio_address = dprio_init_done ? avmm_dprio_address : init_dprio_address; + assign dprio_read = dprio_init_done ? avmm_dprio_read : init_dprio_read; + assign dprio_byteen = dprio_init_done ? avmm_dprio_byteen : init_dprio_byteen; + assign dprio_write = dprio_init_done ? avmm_dprio_write : init_dprio_write; + assign dprio_writedata = dprio_init_done ? avmm_dprio_writedata : init_dprio_writedata; + + assign atpgmode = init_atpgmode; + assign scanen = init_scanen; + assign mdio_dis = init_mdio_dis; + assign ser_shift_load = init_ser_shift_load ; +endmodule +module fpll_dprio_init ( + input clk, + input reset_n, + input locked, + + output [ 5:0] dprio_address, + output dprio_read, + output [ 1:0] dprio_byteen, + output dprio_write, + output [15:0] dprio_writedata, + + output reg atpgmode, + output reg mdio_dis, + output reg scanen, + output reg ser_shift_load, + output reg dprio_init_done +); + + reg [1:0] rst_n = 2'b00; + reg [6:0] count = 7'd0; + reg init_done_forever; + + // Internal versions of control signals + wire int_mdio_dis; + wire int_ser_shift_load; + wire int_dprio_init_done; + wire int_atpgmode/*synthesis keep*/; + wire int_scanen/*synthesis keep*/; + + + assign dprio_address = count[6] ? 5'b0 : count[5:0] ; + assign dprio_byteen = 2'b11; // always enabled + assign dprio_write = ~count[6] & reset_n ; // write for first 64 cycles + assign dprio_read = 1'b0; + assign dprio_writedata = 16'd0; + + assign int_ser_shift_load = count[6] ? |count[2:1] : 1'b1; + assign int_mdio_dis = count[6] ? ~count[2] : 1'b1; + assign int_dprio_init_done = ~init_done_forever ? (count[6] ? &count[2:0] : 1'b0) + : 1'b1; + assign int_atpgmode = 0; + assign int_scanen = 0; + + initial begin + count = 7'd0; + init_done_forever = 0; + mdio_dis = 1'b1; + ser_shift_load = 1'b1; + dprio_init_done = 1'b0; + scanen = 1'b0; + atpgmode = 1'b0; + end + + // reset synch. + always @(posedge clk or negedge reset_n) + if(!reset_n) rst_n <= 2'b00; + else rst_n <= {rst_n[0],1'b1}; + + // counter + always @(posedge clk) + begin + if (!rst_n[1]) + init_done_forever <= 1'b0; + else + begin + if (count[6] && &count[1:0]) + init_done_forever <= 1'b1; + end + end + always @(posedge clk or negedge rst_n[1]) + begin + if(!rst_n[1]) + begin + count <= 7'd0; + end + else if(~int_dprio_init_done) + begin + count <= count + 7'd1; + end + else + begin + count <= count; + end + end + + // outputs + always @(posedge clk) begin + mdio_dis <= int_mdio_dis; + ser_shift_load <= int_ser_shift_load; + dprio_init_done <= int_dprio_init_done; + atpgmode <= int_atpgmode; + scanen <= int_scanen; + end + +endmodule +module dyn_phase_shift +#( + parameter device_family = "Stratix V" +) ( + + input wire clk, + input wire reset, + input wire phase_done, + input wire pll_start_valid, + input wire dps_changed, + input wire dprio_write_done, + input wire [15:0] usr_num_shifts, + input wire [4:0] usr_cnt_sel, + input wire usr_up_dn, + input wire locked, + + //output + output wire dps_done, + output reg phase_en, + output wire up_dn, + output wire dps_changed_valid, + output wire [4:0] cnt_sel); + + + + reg first_phase_shift_d; + reg first_phase_shift_q; + reg [15:0] phase_en_counter; + reg [3:0] dps_current_state; + reg [3:0] dps_next_state; + localparam DPS_START = 4'd0, DPS_WAIT_PHASE_DONE = 4'd1, DPS_DONE = 4'd2, DPS_WAIT_PHASE_EN = 4'd3, DPS_WAIT_DPRIO_WRITING = 4'd4, DPS_CHANGED = 4'd5; + localparam PHASE_EN_WAIT_COUNTER = 5'd1; + + reg [15:0] shifts_done_counter; + reg phase_done_final; + wire gnd /*synthesis keep*/; + + //fsm + //always block controlling the state regs + always @(posedge clk) + begin + if (reset) + begin + dps_current_state <= DPS_DONE; + end + else + begin + dps_current_state <= dps_next_state; + end + end + //the combinational part. assigning the next state + //this turns on the phase_done_final signal when phase_done does this: + //_____ ______ + // |______| + always @(*) + begin + phase_done_final = 0; + first_phase_shift_d = 0; + phase_en = 0; + dps_next_state = DPS_DONE; + case (dps_current_state) + DPS_START: + begin + phase_en = 1'b1; + dps_next_state = DPS_WAIT_PHASE_EN; + end + DPS_WAIT_PHASE_EN: + begin + phase_en = 1'b1; + if (first_phase_shift_q) + begin + first_phase_shift_d = 1'b1; + dps_next_state = DPS_WAIT_PHASE_EN; + end + else + begin + if (phase_en_counter == PHASE_EN_WAIT_COUNTER) + dps_next_state = DPS_WAIT_PHASE_DONE; + else dps_next_state = DPS_WAIT_PHASE_EN; + end + end + DPS_WAIT_PHASE_DONE: + begin + if (!phase_done | !locked) + begin + dps_next_state = DPS_WAIT_PHASE_DONE; + end + else + begin + if ((usr_num_shifts != shifts_done_counter) & (usr_num_shifts != 0)) + begin + dps_next_state = DPS_START; + phase_done_final = 1'b1; + end + else + begin + dps_next_state = DPS_DONE; + end + + end + end + DPS_DONE: + begin + phase_done_final = 0; + if (dps_changed) + dps_next_state = DPS_CHANGED; + else dps_next_state = DPS_DONE; + + end + DPS_CHANGED: + begin + if (pll_start_valid) + dps_next_state = DPS_WAIT_DPRIO_WRITING; + else + dps_next_state = DPS_CHANGED; + end + DPS_WAIT_DPRIO_WRITING: + begin + if (dprio_write_done) + dps_next_state = DPS_START; + else + dps_next_state = DPS_WAIT_DPRIO_WRITING; + end + + default: dps_next_state = 4'bxxxx; + endcase + + + end + + always @(posedge clk) + begin + + + if (dps_current_state == DPS_WAIT_PHASE_DONE) + phase_en_counter <= 0; + else if (dps_current_state == DPS_WAIT_PHASE_EN) + phase_en_counter <= phase_en_counter + 1'b1; + + if (reset) + begin + phase_en_counter <= 0; + shifts_done_counter <= 1'b1; + first_phase_shift_q <= 1; + end + else + begin + if (first_phase_shift_d) + first_phase_shift_q <= 0; + if (dps_done) + begin + shifts_done_counter <= 1'b1; + end + else + begin + if (phase_done_final & (dps_next_state!= DPS_DONE)) + shifts_done_counter <= shifts_done_counter + 1'b1; + else + shifts_done_counter <= shifts_done_counter; + end + end + end + + assign dps_changed_valid = (dps_current_state == DPS_CHANGED); + assign dps_done =(dps_current_state == DPS_DONE) | (dps_current_state == DPS_CHANGED); + assign up_dn = usr_up_dn; + assign gnd = 1'b0; + + //cnt select luts (5) + generic_lcell_comb lcell_cnt_sel_0 ( + .dataa(usr_cnt_sel[0]), + .datab(usr_cnt_sel[1]), + .datac(usr_cnt_sel[2]), + .datad(usr_cnt_sel[3]), + .datae(usr_cnt_sel[4]), + .dataf(gnd), + .combout (cnt_sel[0])); + defparam lcell_cnt_sel_0.lut_mask = 64'hAAAAAAAAAAAAAAAA; + defparam lcell_cnt_sel_0.dont_touch = "on"; + defparam lcell_cnt_sel_0.family = device_family; + generic_lcell_comb lcell_cnt_sel_1 ( + .dataa(usr_cnt_sel[0]), + .datab(usr_cnt_sel[1]), + .datac(usr_cnt_sel[2]), + .datad(usr_cnt_sel[3]), + .datae(usr_cnt_sel[4]), + .dataf(gnd), + .combout (cnt_sel[1])); + defparam lcell_cnt_sel_1.lut_mask = 64'hCCCCCCCCCCCCCCCC; + defparam lcell_cnt_sel_1.dont_touch = "on"; + defparam lcell_cnt_sel_1.family = device_family; + generic_lcell_comb lcell_cnt_sel_2 ( + .dataa(usr_cnt_sel[0]), + .datab(usr_cnt_sel[1]), + .datac(usr_cnt_sel[2]), + .datad(usr_cnt_sel[3]), + .datae(usr_cnt_sel[4]), + .dataf(gnd), + .combout (cnt_sel[2])); + defparam lcell_cnt_sel_2.lut_mask = 64'hF0F0F0F0F0F0F0F0; + defparam lcell_cnt_sel_2.dont_touch = "on"; + defparam lcell_cnt_sel_2.family = device_family; + generic_lcell_comb lcell_cnt_sel_3 ( + .dataa(usr_cnt_sel[0]), + .datab(usr_cnt_sel[1]), + .datac(usr_cnt_sel[2]), + .datad(usr_cnt_sel[3]), + .datae(usr_cnt_sel[4]), + .dataf(gnd), + .combout (cnt_sel[3])); + defparam lcell_cnt_sel_3.lut_mask = 64'hFF00FF00FF00FF00; + defparam lcell_cnt_sel_3.dont_touch = "on"; + defparam lcell_cnt_sel_3.family = device_family; + generic_lcell_comb lcell_cnt_sel_4 ( + .dataa(usr_cnt_sel[0]), + .datab(usr_cnt_sel[1]), + .datac(usr_cnt_sel[2]), + .datad(usr_cnt_sel[3]), + .datae(usr_cnt_sel[4]), + .dataf(gnd), + .combout (cnt_sel[4])); + defparam lcell_cnt_sel_4.lut_mask = 64'hFFFF0000FFFF0000; + defparam lcell_cnt_sel_4.dont_touch = "on"; + defparam lcell_cnt_sel_4.family = device_family; + + +endmodule + +module generic_lcell_comb +#( + //parameter + parameter family = "Stratix V", + parameter lut_mask = 64'hAAAAAAAAAAAAAAAA, + parameter dont_touch = "on" +) ( + + input dataa, + input datab, + input datac, + input datad, + input datae, + input dataf, + + output combout +); + + generate + if (family == "Stratix V") + begin + stratixv_lcell_comb lcell_inst ( + .dataa(dataa), + .datab(datab), + .datac(datac), + .datad(datad), + .datae(datae), + .dataf(dataf), + .combout (combout)); + defparam lcell_inst.lut_mask = lut_mask; + defparam lcell_inst.dont_touch = dont_touch; + end + else if (family == "Arria V") + begin + arriav_lcell_comb lcell_inst ( + .dataa(dataa), + .datab(datab), + .datac(datac), + .datad(datad), + .datae(datae), + .dataf(dataf), + .combout (combout)); + defparam lcell_inst.lut_mask = lut_mask; + defparam lcell_inst.dont_touch = dont_touch; + end + else if (family == "Arria V GZ") + begin + arriavgz_lcell_comb lcell_inst ( + .dataa(dataa), + .datab(datab), + .datac(datac), + .datad(datad), + .datae(datae), + .dataf(dataf), + .combout (combout)); + defparam lcell_inst.lut_mask = lut_mask; + defparam lcell_inst.dont_touch = dont_touch; + end + else if (family == "Cyclone V") + begin + cyclonev_lcell_comb lcell_inst ( + .dataa(dataa), + .datab(datab), + .datac(datac), + .datad(datad), + .datae(datae), + .dataf(dataf), + .combout (combout)); + defparam lcell_inst.lut_mask = lut_mask; + defparam lcell_inst.dont_touch = dont_touch; + end + endgenerate +endmodule diff --git a/sys/pll_cfg/altera_pll_reconfig_top.v b/sys/pll_cfg/altera_pll_reconfig_top.v new file mode 100644 index 0000000..c6d27bf --- /dev/null +++ b/sys/pll_cfg/altera_pll_reconfig_top.v @@ -0,0 +1,428 @@ +// (C) 2001-2017 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +`timescale 1ps/1ps + +module altera_pll_reconfig_top +#( + parameter reconf_width = 64, + parameter device_family = "Stratix V", + parameter RECONFIG_ADDR_WIDTH = 6, + parameter RECONFIG_DATA_WIDTH = 32, + + parameter ROM_ADDR_WIDTH = 9, + parameter ROM_DATA_WIDTH = 32, + parameter ROM_NUM_WORDS = 512, + + parameter ENABLE_MIF = 0, + parameter MIF_FILE_NAME = "", + + parameter ENABLE_BYTEENABLE = 0, + parameter BYTEENABLE_WIDTH = 4, + parameter WAIT_FOR_LOCK = 1 +) ( + + //input + input wire mgmt_clk, + input wire mgmt_reset, + + + //conduits + output wire [reconf_width-1:0] reconfig_to_pll, + input wire [reconf_width-1:0] reconfig_from_pll, + + // user data (avalon-MM slave interface) + output wire [RECONFIG_DATA_WIDTH-1:0] mgmt_readdata, + output wire mgmt_waitrequest, + input wire [RECONFIG_ADDR_WIDTH-1:0] mgmt_address, + input wire mgmt_read, + input wire mgmt_write, + input wire [RECONFIG_DATA_WIDTH-1:0] mgmt_writedata, + + //conditional input + input wire [BYTEENABLE_WIDTH-1:0] mgmt_byteenable +); + +localparam NM28_START_REG = 6'b000010; +localparam NM20_START_REG = 9'b000000000; +localparam NM20_MIFSTART_ADDR = 9'b000010000; + +localparam MIF_STATE_DONE = 2'b00; +localparam MIF_STATE_START = 2'b01; +localparam MIF_STATE_BUSY = 2'b10; + +wire mgmt_byteenable_write; +assign mgmt_byteenable_write = (ENABLE_BYTEENABLE == 1) ? + ((mgmt_byteenable == {BYTEENABLE_WIDTH{1'b1}}) ? mgmt_write : 1'b0) : + mgmt_write; + +generate +if (device_family == "Arria 10") +begin:nm20_reconfig + if(ENABLE_MIF == 1) + begin:mif_reconfig_20nm // Generate Reconfig with MIF + + // MIF-related regs/wires + reg [RECONFIG_ADDR_WIDTH-1:0] reconfig_mgmt_addr; + reg reconfig_mgmt_read; + reg reconfig_mgmt_write; + reg [RECONFIG_DATA_WIDTH-1:0] reconfig_mgmt_writedata; + wire reconfig_mgmt_waitrequest; + wire [RECONFIG_DATA_WIDTH-1:0] reconfig_mgmt_readdata; + + wire [RECONFIG_ADDR_WIDTH-1:0] mif2reconfig_addr; + wire mif_busy; + wire mif2reconfig_read; + wire mif2reconfig_write; + wire [RECONFIG_DATA_WIDTH-1:0] mif2reconfig_writedata; + wire [ROM_ADDR_WIDTH-1:0] mif_base_addr; + reg mif_select; + //wire mif_user_start; // start signal provided by user to start mif + //reg user_start; + + reg [1:0] mif_curstate; + reg [1:0] mif_nextstate; + + wire mif_start; //start signal to mif reader + + assign mgmt_waitrequest = reconfig_mgmt_waitrequest | mif_busy;// | user_start; + // Don't output readdata if MIF streaming is taking place + assign mgmt_readdata = (mif_select) ? 32'b0 : reconfig_mgmt_readdata; + + //user must lower this by the time mif streaming is done - suggest to lower after 1 cycle + assign mif_start = mgmt_byteenable_write & (mgmt_address == NM20_MIFSTART_ADDR); + + //mif base addr is initially specified by the user + assign mif_base_addr = mgmt_writedata[ROM_ADDR_WIDTH-1:0]; + + //MIF statemachine + always @(posedge mgmt_clk) + begin + if(mgmt_reset) + mif_curstate <= MIF_STATE_DONE; + else + mif_curstate <= mif_nextstate; + end + + always @(*) + begin + case (mif_curstate) + MIF_STATE_DONE: + begin + if(mif_start) + mif_nextstate <= MIF_STATE_START; + else + mif_nextstate <= MIF_STATE_DONE; + end + MIF_STATE_START: + begin + mif_nextstate <= MIF_STATE_BUSY; + end + MIF_STATE_BUSY: + begin + if(mif_busy) + mif_nextstate <= MIF_STATE_BUSY; + else + mif_nextstate <= MIF_STATE_DONE; + end + endcase + end + + //Mif muxes + always @(*) + begin + if (mgmt_reset) + begin + reconfig_mgmt_addr <= 0; + reconfig_mgmt_read <= 0; + reconfig_mgmt_write <= 0; + reconfig_mgmt_writedata <= 0; + //user_start <= 0; + end + else + begin + reconfig_mgmt_addr <= (mif_select) ? mif2reconfig_addr : mgmt_address; + reconfig_mgmt_read <= (mif_select) ? mif2reconfig_read : mgmt_read; + reconfig_mgmt_write <= (mif_select) ? mif2reconfig_write : mgmt_byteenable_write; + reconfig_mgmt_writedata <= (mif_select) ? mif2reconfig_writedata : mgmt_writedata; + //user_start <= (mgmt_address == NM20_START_REG && mgmt_write == 1'b1) ? 1'b1 : 1'b0; + end + end + + always @(*) + begin + if (mgmt_reset) + begin + mif_select <= 0; + end + else + begin + mif_select <= (mif_start || mif_busy) ? 1'b1 : 1'b0; + end + end + + twentynm_pll_reconfig_mif_reader + #( + .RECONFIG_ADDR_WIDTH(RECONFIG_ADDR_WIDTH), + .RECONFIG_DATA_WIDTH(RECONFIG_DATA_WIDTH), + .ROM_ADDR_WIDTH(ROM_ADDR_WIDTH), + .ROM_DATA_WIDTH(ROM_DATA_WIDTH), + .ROM_NUM_WORDS(ROM_NUM_WORDS), + .DEVICE_FAMILY(device_family), + .ENABLE_MIF(ENABLE_MIF), + .MIF_FILE_NAME(MIF_FILE_NAME) + ) twentynm_pll_reconfig_mif_reader_inst0 ( + .mif_clk(mgmt_clk), + .mif_rst(mgmt_reset), + + //Altera_PLL Reconfig interface + //inputs + .reconfig_waitrequest(reconfig_mgmt_waitrequest), + //.reconfig_read_data(reconfig_mgmt_readdata), + //outputs + .reconfig_write_data(mif2reconfig_writedata), + .reconfig_addr(mif2reconfig_addr), + .reconfig_write(mif2reconfig_write), + .reconfig_read(mif2reconfig_read), + + //MIF Ctrl Interface + //inputs + .mif_base_addr(mif_base_addr), + .mif_start(mif_start), + //outputs + .mif_busy(mif_busy) + ); + + // ------ END MIF-RELATED MANAGEMENT ------ + + twentynm_iopll_reconfig_core + #( + .WAIT_FOR_LOCK(WAIT_FOR_LOCK) + ) twentynm_iopll_reconfig_core_inst ( + // Inputs + .mgmt_clk(mgmt_clk), + .mgmt_rst_n(~mgmt_reset), + .mgmt_read(reconfig_mgmt_read), + .mgmt_write(reconfig_mgmt_write), + .mgmt_address(reconfig_mgmt_addr), + .mgmt_writedata(reconfig_mgmt_writedata), + + // Outputs + .mgmt_readdata(reconfig_mgmt_readdata), + .mgmt_waitrequest(reconfig_mgmt_waitrequest), + + // PLL Conduits + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll) + ); + + end // End generate reconfig with MIF + else + begin:reconfig_core_20nm + twentynm_iopll_reconfig_core + #( + .WAIT_FOR_LOCK(WAIT_FOR_LOCK) + ) twentynm_iopll_reconfig_core_inst ( + // Inputs + .mgmt_clk(mgmt_clk), + .mgmt_rst_n(~mgmt_reset), + .mgmt_read(mgmt_read), + .mgmt_write(mgmt_byteenable_write), + .mgmt_address(mgmt_address), + .mgmt_writedata(mgmt_writedata), + + // Outputs + .mgmt_readdata(mgmt_readdata), + .mgmt_waitrequest(mgmt_waitrequest), + + // PLL Conduits + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll) + ); + end +end // 20nm reconfig +else +begin:NM28_reconfig + if (ENABLE_MIF == 1) + begin:mif_reconfig // Generate Reconfig with MIF + + // MIF-related regs/wires + reg [RECONFIG_ADDR_WIDTH-1:0] reconfig_mgmt_addr; + reg reconfig_mgmt_read; + reg reconfig_mgmt_write; + reg [RECONFIG_DATA_WIDTH-1:0] reconfig_mgmt_writedata; + wire reconfig_mgmt_waitrequest; + wire [RECONFIG_DATA_WIDTH-1:0] reconfig_mgmt_readdata; + + wire [RECONFIG_ADDR_WIDTH-1:0] mif2reconfig_addr; + wire mif2reconfig_busy; + wire mif2reconfig_read; + wire mif2reconfig_write; + wire [RECONFIG_DATA_WIDTH-1:0] mif2reconfig_writedata; + wire [ROM_ADDR_WIDTH-1:0] mif_base_addr; + reg mif_select; + reg user_start; + + wire reconfig2mif_start_out; + + assign mgmt_waitrequest = reconfig_mgmt_waitrequest | mif2reconfig_busy | user_start; + // Don't output readdata if MIF streaming is taking place + assign mgmt_readdata = (mif_select) ? 32'b0 : reconfig_mgmt_readdata; + + always @(posedge mgmt_clk) + begin + if (mgmt_reset) + begin + reconfig_mgmt_addr <= 0; + reconfig_mgmt_read <= 0; + reconfig_mgmt_write <= 0; + reconfig_mgmt_writedata <= 0; + user_start <= 0; + end + else + begin + reconfig_mgmt_addr <= (mif_select) ? mif2reconfig_addr : mgmt_address; + reconfig_mgmt_read <= (mif_select) ? mif2reconfig_read : mgmt_read; + reconfig_mgmt_write <= (mif_select) ? mif2reconfig_write : mgmt_byteenable_write; + reconfig_mgmt_writedata <= (mif_select) ? mif2reconfig_writedata : mgmt_writedata; + user_start <= (mgmt_address == NM28_START_REG && mgmt_byteenable_write == 1'b1) ? 1'b1 : 1'b0; + end + end + + always @(*) + begin + if (mgmt_reset) + begin + mif_select <= 0; + end + else + begin + mif_select <= (reconfig2mif_start_out || mif2reconfig_busy) ? 1'b1 : 1'b0; + end + end + + altera_pll_reconfig_mif_reader + #( + .RECONFIG_ADDR_WIDTH(RECONFIG_ADDR_WIDTH), + .RECONFIG_DATA_WIDTH(RECONFIG_DATA_WIDTH), + .ROM_ADDR_WIDTH(ROM_ADDR_WIDTH), + .ROM_DATA_WIDTH(ROM_DATA_WIDTH), + .ROM_NUM_WORDS(ROM_NUM_WORDS), + .DEVICE_FAMILY(device_family), + .ENABLE_MIF(ENABLE_MIF), + .MIF_FILE_NAME(MIF_FILE_NAME) + ) altera_pll_reconfig_mif_reader_inst0 ( + .mif_clk(mgmt_clk), + .mif_rst(mgmt_reset), + + //Altera_PLL Reconfig interface + //inputs + .reconfig_busy(reconfig_mgmt_waitrequest), + .reconfig_read_data(reconfig_mgmt_readdata), + //outputs + .reconfig_write_data(mif2reconfig_writedata), + .reconfig_addr(mif2reconfig_addr), + .reconfig_write(mif2reconfig_write), + .reconfig_read(mif2reconfig_read), + + //MIF Ctrl Interface + //inputs + .mif_base_addr(mif_base_addr), + .mif_start(reconfig2mif_start_out), + //outputs + .mif_busy(mif2reconfig_busy) + ); + + // ------ END MIF-RELATED MANAGEMENT ------ + + + altera_pll_reconfig_core + #( + .reconf_width(reconf_width), + .device_family(device_family), + .RECONFIG_ADDR_WIDTH(RECONFIG_ADDR_WIDTH), + .RECONFIG_DATA_WIDTH(RECONFIG_DATA_WIDTH), + .ROM_ADDR_WIDTH(ROM_ADDR_WIDTH), + .ROM_DATA_WIDTH(ROM_DATA_WIDTH), + .ROM_NUM_WORDS(ROM_NUM_WORDS) + ) altera_pll_reconfig_core_inst0 ( + //inputs + .mgmt_clk(mgmt_clk), + .mgmt_reset(mgmt_reset), + + //PLL interface conduits + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll), + + //User data outputs + .mgmt_readdata(reconfig_mgmt_readdata), + .mgmt_waitrequest(reconfig_mgmt_waitrequest), + + //User data inputs + .mgmt_address(reconfig_mgmt_addr), + .mgmt_read(reconfig_mgmt_read), + .mgmt_write(reconfig_mgmt_write), + .mgmt_writedata(reconfig_mgmt_writedata), + + // other + .mif_start_out(reconfig2mif_start_out), + .mif_base_addr(mif_base_addr) + ); + + end // End generate reconfig with MIF + else + begin:reconfig_core // Generate Reconfig core only + + wire reconfig2mif_start_out; + wire [ROM_ADDR_WIDTH-1:0] mif_base_addr; + + altera_pll_reconfig_core + #( + .reconf_width(reconf_width), + .device_family(device_family), + .RECONFIG_ADDR_WIDTH(RECONFIG_ADDR_WIDTH), + .RECONFIG_DATA_WIDTH(RECONFIG_DATA_WIDTH), + .ROM_ADDR_WIDTH(ROM_ADDR_WIDTH), + .ROM_DATA_WIDTH(ROM_DATA_WIDTH), + .ROM_NUM_WORDS(ROM_NUM_WORDS) + ) altera_pll_reconfig_core_inst0 ( + //inputs + .mgmt_clk(mgmt_clk), + .mgmt_reset(mgmt_reset), + + //PLL interface conduits + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll), + + //User data outputs + .mgmt_readdata(mgmt_readdata), + .mgmt_waitrequest(mgmt_waitrequest), + + //User data inputs + .mgmt_address(mgmt_address), + .mgmt_read(mgmt_read), + .mgmt_write(mgmt_byteenable_write), + .mgmt_writedata(mgmt_writedata), + + // other + .mif_start_out(reconfig2mif_start_out), + .mif_base_addr(mif_base_addr) + ); + + + end // End generate reconfig core only +end // End 28nm Reconfig +endgenerate + +endmodule + diff --git a/sys/pll_hdmi.13.qip b/sys/pll_hdmi.13.qip new file mode 100644 index 0000000..76def89 --- /dev/null +++ b/sys/pll_hdmi.13.qip @@ -0,0 +1,17 @@ +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_hdmi" -name MISC_FILE [file join $::quartus(qip_path) "pll_hdmi.cmp"] +set_global_assignment -name SYNTHESIS_ONLY_QIP ON + +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi.v"] +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi/pll_hdmi_0002.v"] + +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET ON -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" + +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_VERSION "13.1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_hdmi.qip b/sys/pll_hdmi.qip new file mode 100644 index 0000000..be34aeb --- /dev/null +++ b/sys/pll_hdmi.qip @@ -0,0 +1,483 @@ +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "pll_hdmi" -name MISC_FILE [file join $::quartus(qip_path) "pll_hdmi.cmp"] +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_NAME "cGxsX2hkbWk=" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_hdmi" -library "pll_hdmi" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_NAME "cGxsX2hkbWlfMDAwMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_DISPLAY_NAME "QWx0ZXJhIFBMTA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_VERSION "MTcuMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_DESCRIPTION "QWx0ZXJhIFBoYXNlLUxvY2tlZCBMb29wIChBTFRFUkFfUExMKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZGVidWdfcHJpbnRfb3V0cHV0::ZmFsc2U=::ZGVidWdfcHJpbnRfb3V0cHV0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k::ZmFsc2U=::ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZGV2aWNl::NUNFQkEyRjE3QTc=::ZGV2aWNl" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9tb2Rl::RnJhY3Rpb25hbC1OIFBMTA==::UExMIE1vZGU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==::dHJ1ZQ==::ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmVyZW5jZV9jbG9ja19mcmVxdWVuY3k=::NTAuMA==::UmVmZXJlbmNlIENsb2NrIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==::NTAuMCBNSHo=::cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2NoYW5uZWxfc3BhY2luZw==::MC4w::Q2hhbm5lbCBTcGFjaW5n" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX29wZXJhdGlvbl9tb2Rl::ZGlyZWN0::T3BlcmF0aW9uIE1vZGU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2ZlZWRiYWNrX2Nsb2Nr::R2xvYmFsIENsb2Nr::RmVlZGJhY2sgQ2xvY2s=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWN0aW9uYWxfY291dA==::MzI=::RnJhY3Rpb25hbCBjYXJyeSBvdXQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2ZyYWN0aW9uYWxfY291dA==::MzI=::cGxsX2ZyYWN0aW9uYWxfY291dA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::RFNNIE9yZGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::cGxsX2RzbV9vdXRfc2Vs" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::ZGlyZWN0::b3BlcmF0aW9uX21vZGU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::ZmFsc2U=::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::MQ==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::MQ==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MTQ4LjU=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::OA==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MzkwODQyMDE1Mw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::Mw==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzA=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDA=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUw::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kx::NjUuMA==::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Ix::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUx::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjI=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3ky::MjcuMA==::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzI=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iy::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjI=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mg==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mg==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzI=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDI=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUy::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjM=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kz::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzM=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iz::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjM=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzM=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDM=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUz::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjQ=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k0::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzQ=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I0::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjQ=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzQ=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDQ=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU0::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjU=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k1::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzU=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I1::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjU=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzU=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDU=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU1::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjY=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k2::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzY=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I2::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjY=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Ng==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Ng==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzY=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDY=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU2::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjc=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k3::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzc=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I3::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjc=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Nw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Nw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzc=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDc=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU3::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjg=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k4::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzg=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I4::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjg=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzg=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDg=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU4::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjk=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k5::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzk=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I5::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjk=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzk=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDk=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU5::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEw::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEw::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEw::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTA=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTA=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTA=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTA=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEw::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEw::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEx::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEx::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEx::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTE=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTE=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTE=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTE=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEx::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEx::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEy::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEy::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEy::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTI=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTI=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTI=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTI=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEy::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEy::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEz::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEz::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEz::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTM=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTM=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTM=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTM=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEz::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEz::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE0::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE0::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE0::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTQ=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTQ=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTQ=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTQ=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE0::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE0::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE1::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE1::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE1::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTU=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTU=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTU=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTU=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE1::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE1::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE2::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE2::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE2::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTY=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTY=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTY=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTY=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE2::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE2::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE3::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE3::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE3::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTc=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTc=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTc=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTc=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MTQ4LjUwMDAwMCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::MCBwcw==::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTI=::NTA=::ZHV0eV9jeWNsZTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQz::MCBwcw==::cGhhc2Vfc2hpZnQz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTM=::NTA=::ZHV0eV9jeWNsZTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ0::MCBwcw==::cGhhc2Vfc2hpZnQ0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTQ=::NTA=::ZHV0eV9jeWNsZTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ1::MCBwcw==::cGhhc2Vfc2hpZnQ1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTU=::NTA=::ZHV0eV9jeWNsZTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ2::MCBwcw==::cGhhc2Vfc2hpZnQ2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTY=::NTA=::ZHV0eV9jeWNsZTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ3::MCBwcw==::cGhhc2Vfc2hpZnQ3" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTc=::NTA=::ZHV0eV9jeWNsZTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ4::MCBwcw==::cGhhc2Vfc2hpZnQ4" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTg=::NTA=::ZHV0eV9jeWNsZTg=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ5::MCBwcw==::cGhhc2Vfc2hpZnQ5" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTk=::NTA=::ZHV0eV9jeWNsZTk=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMA==::MCBwcw==::cGhhc2Vfc2hpZnQxMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEw::NTA=::ZHV0eV9jeWNsZTEw" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMQ==::MCBwcw==::cGhhc2Vfc2hpZnQxMQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEx::NTA=::ZHV0eV9jeWNsZTEx" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMg==::MCBwcw==::cGhhc2Vfc2hpZnQxMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEy::NTA=::ZHV0eV9jeWNsZTEy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMw==::MCBwcw==::cGhhc2Vfc2hpZnQxMw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEz::NTA=::ZHV0eV9jeWNsZTEz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNA==::MCBwcw==::cGhhc2Vfc2hpZnQxNA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE0::NTA=::ZHV0eV9jeWNsZTE0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNQ==::MCBwcw==::cGhhc2Vfc2hpZnQxNQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE1::NTA=::ZHV0eV9jeWNsZTE1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNg==::MCBwcw==::cGhhc2Vfc2hpZnQxNg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE2::NTA=::ZHV0eV9jeWNsZTE2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNw==::MCBwcw==::cGhhc2Vfc2hpZnQxNw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE3::NTA=::ZHV0eV9jeWNsZTE3" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9hdXRvX3Jlc2V0::T24=::UExMIEF1dG8gUmVzZXQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9iYW5kd2lkdGhfcHJlc2V0::QXV0bw==::UExMIEJhbmR3aWR0aCBQcmVzZXQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3JlY29uZg==::dHJ1ZQ==::RW5hYmxlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIFBMTA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Rwc19wb3J0cw==::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBkeW5hbWljIHBoYXNlIHNoaWZ0IHBvcnRz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::Q3ljbG9uZSBW::UExMIFRZUEU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::UmVjb25maWd1cmFibGU=::UExMIFNVQlRZUEU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bV9jbnRfaGlfZGl2::NA==::bV9jbnRfaGlfZGl2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bV9jbnRfbG9fZGl2::NA==::bV9jbnRfbG9fZGl2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bl9jbnRfaGlfZGl2::MjU2::bl9jbnRfaGlfZGl2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bl9jbnRfbG9fZGl2::MjU2::bl9jbnRfbG9fZGl2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bV9jbnRfYnlwYXNzX2Vu::ZmFsc2U=::bV9jbnRfYnlwYXNzX2Vu" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bl9jbnRfYnlwYXNzX2Vu::dHJ1ZQ==::bl9jbnRfYnlwYXNzX2Vu" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bV9jbnRfb2RkX2Rpdl9kdXR5X2Vu::ZmFsc2U=::bV9jbnRfb2RkX2Rpdl9kdXR5X2Vu" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bl9jbnRfb2RkX2Rpdl9kdXR5X2Vu::ZmFsc2U=::bl9jbnRfb2RkX2Rpdl9kdXR5X2Vu" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MA==::Mg==::Y19jbnRfaGlfZGl2MA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MA==::MQ==::Y19jbnRfbG9fZGl2MA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDA=::MQ==::Y19jbnRfcHJzdDA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Qw::MA==::Y19jbnRfcGhfbXV4X3Byc3Qw" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMA==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMA==::ZmFsc2U=::Y19jbnRfYnlwYXNzX2VuMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMA==::dHJ1ZQ==::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MQ==::MQ==::Y19jbnRfaGlfZGl2MQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MQ==::MQ==::Y19jbnRfbG9fZGl2MQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDE=::MQ==::Y19jbnRfcHJzdDE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Qx::MA==::Y19jbnRfcGhfbXV4X3Byc3Qx" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMQ==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMQ==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMQ==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2Mg==::MQ==::Y19jbnRfaGlfZGl2Mg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2Mg==::MQ==::Y19jbnRfbG9fZGl2Mg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDI=::MQ==::Y19jbnRfcHJzdDI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Qy::MA==::Y19jbnRfcGhfbXV4X3Byc3Qy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMg==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMg==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMg==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2Mw==::MQ==::Y19jbnRfaGlfZGl2Mw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2Mw==::MQ==::Y19jbnRfbG9fZGl2Mw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDM=::MQ==::Y19jbnRfcHJzdDM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Qz::MA==::Y19jbnRfcGhfbXV4X3Byc3Qz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMw==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMw==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMw==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2NA==::MQ==::Y19jbnRfaGlfZGl2NA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2NA==::MQ==::Y19jbnRfbG9fZGl2NA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDQ=::MQ==::Y19jbnRfcHJzdDQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q0::MA==::Y19jbnRfcGhfbXV4X3Byc3Q0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjNA==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjNA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuNA==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuNA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNA==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2NQ==::MQ==::Y19jbnRfaGlfZGl2NQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2NQ==::MQ==::Y19jbnRfbG9fZGl2NQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDU=::MQ==::Y19jbnRfcHJzdDU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q1::MA==::Y19jbnRfcGhfbXV4X3Byc3Q1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjNQ==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjNQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuNQ==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuNQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNQ==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2Ng==::MQ==::Y19jbnRfaGlfZGl2Ng==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2Ng==::MQ==::Y19jbnRfbG9fZGl2Ng==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDY=::MQ==::Y19jbnRfcHJzdDY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q2::MA==::Y19jbnRfcGhfbXV4X3Byc3Q2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjNg==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjNg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuNg==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuNg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNg==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2Nw==::MQ==::Y19jbnRfaGlfZGl2Nw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2Nw==::MQ==::Y19jbnRfbG9fZGl2Nw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDc=::MQ==::Y19jbnRfcHJzdDc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q3::MA==::Y19jbnRfcGhfbXV4X3Byc3Q3" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjNw==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjNw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuNw==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuNw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNw==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuNw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2OA==::MQ==::Y19jbnRfaGlfZGl2OA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2OA==::MQ==::Y19jbnRfbG9fZGl2OA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDg=::MQ==::Y19jbnRfcHJzdDg=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q4::MA==::Y19jbnRfcGhfbXV4X3Byc3Q4" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjOA==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjOA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuOA==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuOA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuOA==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuOA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2OQ==::MQ==::Y19jbnRfaGlfZGl2OQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2OQ==::MQ==::Y19jbnRfbG9fZGl2OQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDk=::MQ==::Y19jbnRfcHJzdDk=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3Q5::MA==::Y19jbnRfcGhfbXV4X3Byc3Q5" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjOQ==::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjOQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuOQ==::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuOQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuOQ==::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuOQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTA=::MQ==::Y19jbnRfaGlfZGl2MTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTA=::MQ==::Y19jbnRfbG9fZGl2MTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDEw::MQ==::Y19jbnRfcHJzdDEw" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxMA==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxMA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTA=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTA=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTA=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTA=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTE=::MQ==::Y19jbnRfaGlfZGl2MTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTE=::MQ==::Y19jbnRfbG9fZGl2MTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDEx::MQ==::Y19jbnRfcHJzdDEx" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxMQ==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxMQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTE=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTE=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTE=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTE=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTI=::MQ==::Y19jbnRfaGlfZGl2MTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTI=::MQ==::Y19jbnRfbG9fZGl2MTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDEy::MQ==::Y19jbnRfcHJzdDEy" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxMg==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxMg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTI=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTI=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTI=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTI=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTM=::MQ==::Y19jbnRfaGlfZGl2MTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTM=::MQ==::Y19jbnRfbG9fZGl2MTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDEz::MQ==::Y19jbnRfcHJzdDEz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxMw==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxMw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTM=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTM=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTM=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTM=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTQ=::MQ==::Y19jbnRfaGlfZGl2MTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTQ=::MQ==::Y19jbnRfbG9fZGl2MTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDE0::MQ==::Y19jbnRfcHJzdDE0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxNA==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxNA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTQ=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTQ=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTQ=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTU=::MQ==::Y19jbnRfaGlfZGl2MTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTU=::MQ==::Y19jbnRfbG9fZGl2MTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDE1::MQ==::Y19jbnRfcHJzdDE1" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxNQ==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxNQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTU=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTU=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTU=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTY=::MQ==::Y19jbnRfaGlfZGl2MTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTY=::MQ==::Y19jbnRfbG9fZGl2MTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDE2::MQ==::Y19jbnRfcHJzdDE2" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxNg==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxNg==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTY=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTY=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTY=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaGlfZGl2MTc=::MQ==::Y19jbnRfaGlfZGl2MTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfbG9fZGl2MTc=::MQ==::Y19jbnRfbG9fZGl2MTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcHJzdDE3::MQ==::Y19jbnRfcHJzdDE3" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfcGhfbXV4X3Byc3QxNw==::MA==::Y19jbnRfcGhfbXV4X3Byc3QxNw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfaW5fc3JjMTc=::cGhfbXV4X2Nsaw==::Y19jbnRfaW5fc3JjMTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfYnlwYXNzX2VuMTc=::dHJ1ZQ==::Y19jbnRfYnlwYXNzX2VuMTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTc=::ZmFsc2U=::Y19jbnRfb2RkX2Rpdl9kdXR5X2VuMTc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX3Zjb19kaXY=::Mg==::cGxsX3Zjb19kaXY=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2NwX2N1cnJlbnQ=::MjA=::cGxsX2NwX2N1cnJlbnQ=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2J3Y3RybA==::NDAwMA==::cGxsX2J3Y3RybA==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX291dHB1dF9jbGtfZnJlcXVlbmN5::NDQ1LjQ5OTk5OSBNSHo=::cGxsX291dHB1dF9jbGtfZnJlcXVlbmN5" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2ZyYWN0aW9uYWxfZGl2aXNpb24=::MzkwODQyMDE1Mw==::cGxsX2ZyYWN0aW9uYWxfZGl2aXNpb24=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "bWltaWNfZmJjbGtfdHlwZQ==::bm9uZQ==::bWltaWNfZmJjbGtfdHlwZQ==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2ZiY2xrX211eF8x::Z2xi::cGxsX2ZiY2xrX211eF8x" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX2ZiY2xrX211eF8y::bV9jbnQ=::cGxsX2ZiY2xrX211eF8y" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX21fY250X2luX3NyYw==::cGhfbXV4X2Nsaw==::cGxsX21fY250X2luX3NyYw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "cGxsX3NsZl9yc3Q=::dHJ1ZQ==::cGxsX3NsZl9yc3Q=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NCw0LDI1NiwyNTYsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSwyLDEsMSwwLHBoX211eF9jbGssZmFsc2UsdHJ1ZSwyLDIwLDQwMDAsNDQ1LjQ5OTk5OSBNSHosMzkwODQyMDE1Myxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLHRydWU=::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19udW0=::MQ==::TnVtYmVyIG9mIER5bmFtaWMgUGhhc2UgU2hpZnRz" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19kaXI=::UG9zaXRpdmU=::RHluYW1pYyBQaGFzZSBTaGlmdCBEaXJlY3Rpb24=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmNsa19zd2l0Y2g=::ZmFsc2U=::Q3JlYXRlIGEgc2Vjb25kIGlucHV0IGNsayAncmVmY2xrMSc=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX291dA==::ZmFsc2U=::Q3JlYXRlIGEgJ2Nhc2NhZGVfb3V0JyBzaWduYWwgdG8gY29ubmVjdCB3aXRoIGEgZG93bnN0cmVhbSBQTEw=" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX2lu::ZmFsc2U=::Q3JlYXRlIGFuIGFkanBsbGluIG9yIGNjbGsgc2lnbmFsIHRvIGNvbm5lY3Qgd2l0aCBhbiB1cHN0cmVhbSBQTEw=" + +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi.v"] +set_global_assignment -library "pll_hdmi" -name VERILOG_FILE [file join $::quartus(qip_path) "pll_hdmi/pll_hdmi_0002.v"] +set_global_assignment -library "pll_hdmi" -name QIP_FILE [file join $::quartus(qip_path) "pll_hdmi/pll_hdmi_0002.qip"] + +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_VERSION "17.0" +set_global_assignment -entity "pll_hdmi_0002" -library "pll_hdmi" -name IP_TOOL_ENV "mwpim" diff --git a/sys/pll_hdmi.v b/sys/pll_hdmi.v new file mode 100644 index 0000000..52a9de9 --- /dev/null +++ b/sys/pll_hdmi.v @@ -0,0 +1,256 @@ +// megafunction wizard: %Altera PLL v17.0% +// GENERATION: XML +// pll_hdmi.v + +// Generated using ACDS version 17.0 598 + +`timescale 1 ps / 1 ps +module pll_hdmi ( + input wire refclk, // refclk.clk + input wire rst, // reset.reset + output wire outclk_0, // outclk0.clk + input wire [63:0] reconfig_to_pll, // reconfig_to_pll.reconfig_to_pll + output wire [63:0] reconfig_from_pll // reconfig_from_pll.reconfig_from_pll + ); + + pll_hdmi_0002 pll_hdmi_inst ( + .refclk (refclk), // refclk.clk + .rst (rst), // reset.reset + .outclk_0 (outclk_0), // outclk0.clk + .reconfig_to_pll (reconfig_to_pll), // reconfig_to_pll.reconfig_to_pll + .reconfig_from_pll (reconfig_from_pll), // reconfig_from_pll.reconfig_from_pll + .locked () // (terminated) + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : pll_hdmi.vo +// RELATED_FILES: pll_hdmi.v, pll_hdmi_0002.v diff --git a/sys/pll_hdmi/pll_hdmi_0002.qip b/sys/pll_hdmi/pll_hdmi_0002.qip new file mode 100644 index 0000000..3cb7073 --- /dev/null +++ b/sys/pll_hdmi/pll_hdmi_0002.qip @@ -0,0 +1,2 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name UNFORCE_MERGE_PLL_OUTPUT_COUNTER ON -to "*pll_hdmi_0002*|altera_pll:altera_pll_i*|*" diff --git a/sys/pll_hdmi/pll_hdmi_0002.v b/sys/pll_hdmi/pll_hdmi_0002.v new file mode 100644 index 0000000..dc63100 --- /dev/null +++ b/sys/pll_hdmi/pll_hdmi_0002.v @@ -0,0 +1,241 @@ +`timescale 1ns/10ps +module pll_hdmi_0002( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'locked' + output wire locked, + + // interface 'reconfig_to_pll' + input wire [63:0] reconfig_to_pll, + + // interface 'reconfig_from_pll' + output wire [63:0] reconfig_from_pll +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("50.0 MHz"), + .pll_fractional_cout(32), + .pll_dsm_out_sel("1st_order"), + .operation_mode("direct"), + .number_of_clocks(1), + .output_clock_frequency0("148.500000 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("0 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("0 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("0 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("0 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("Cyclone V"), + .pll_subtype("Reconfigurable"), + .m_cnt_hi_div(4), + .m_cnt_lo_div(4), + .n_cnt_hi_div(256), + .n_cnt_lo_div(256), + .m_cnt_bypass_en("false"), + .n_cnt_bypass_en("true"), + .m_cnt_odd_div_duty_en("false"), + .n_cnt_odd_div_duty_en("false"), + .c_cnt_hi_div0(2), + .c_cnt_lo_div0(1), + .c_cnt_prst0(1), + .c_cnt_ph_mux_prst0(0), + .c_cnt_in_src0("ph_mux_clk"), + .c_cnt_bypass_en0("false"), + .c_cnt_odd_div_duty_en0("true"), + .c_cnt_hi_div1(1), + .c_cnt_lo_div1(1), + .c_cnt_prst1(1), + .c_cnt_ph_mux_prst1(0), + .c_cnt_in_src1("ph_mux_clk"), + .c_cnt_bypass_en1("true"), + .c_cnt_odd_div_duty_en1("false"), + .c_cnt_hi_div2(1), + .c_cnt_lo_div2(1), + .c_cnt_prst2(1), + .c_cnt_ph_mux_prst2(0), + .c_cnt_in_src2("ph_mux_clk"), + .c_cnt_bypass_en2("true"), + .c_cnt_odd_div_duty_en2("false"), + .c_cnt_hi_div3(1), + .c_cnt_lo_div3(1), + .c_cnt_prst3(1), + .c_cnt_ph_mux_prst3(0), + .c_cnt_in_src3("ph_mux_clk"), + .c_cnt_bypass_en3("true"), + .c_cnt_odd_div_duty_en3("false"), + .c_cnt_hi_div4(1), + .c_cnt_lo_div4(1), + .c_cnt_prst4(1), + .c_cnt_ph_mux_prst4(0), + .c_cnt_in_src4("ph_mux_clk"), + .c_cnt_bypass_en4("true"), + .c_cnt_odd_div_duty_en4("false"), + .c_cnt_hi_div5(1), + .c_cnt_lo_div5(1), + .c_cnt_prst5(1), + .c_cnt_ph_mux_prst5(0), + .c_cnt_in_src5("ph_mux_clk"), + .c_cnt_bypass_en5("true"), + .c_cnt_odd_div_duty_en5("false"), + .c_cnt_hi_div6(1), + .c_cnt_lo_div6(1), + .c_cnt_prst6(1), + .c_cnt_ph_mux_prst6(0), + .c_cnt_in_src6("ph_mux_clk"), + .c_cnt_bypass_en6("true"), + .c_cnt_odd_div_duty_en6("false"), + .c_cnt_hi_div7(1), + .c_cnt_lo_div7(1), + .c_cnt_prst7(1), + .c_cnt_ph_mux_prst7(0), + .c_cnt_in_src7("ph_mux_clk"), + .c_cnt_bypass_en7("true"), + .c_cnt_odd_div_duty_en7("false"), + .c_cnt_hi_div8(1), + .c_cnt_lo_div8(1), + .c_cnt_prst8(1), + .c_cnt_ph_mux_prst8(0), + .c_cnt_in_src8("ph_mux_clk"), + .c_cnt_bypass_en8("true"), + .c_cnt_odd_div_duty_en8("false"), + .c_cnt_hi_div9(1), + .c_cnt_lo_div9(1), + .c_cnt_prst9(1), + .c_cnt_ph_mux_prst9(0), + .c_cnt_in_src9("ph_mux_clk"), + .c_cnt_bypass_en9("true"), + .c_cnt_odd_div_duty_en9("false"), + .c_cnt_hi_div10(1), + .c_cnt_lo_div10(1), + .c_cnt_prst10(1), + .c_cnt_ph_mux_prst10(0), + .c_cnt_in_src10("ph_mux_clk"), + .c_cnt_bypass_en10("true"), + .c_cnt_odd_div_duty_en10("false"), + .c_cnt_hi_div11(1), + .c_cnt_lo_div11(1), + .c_cnt_prst11(1), + .c_cnt_ph_mux_prst11(0), + .c_cnt_in_src11("ph_mux_clk"), + .c_cnt_bypass_en11("true"), + .c_cnt_odd_div_duty_en11("false"), + .c_cnt_hi_div12(1), + .c_cnt_lo_div12(1), + .c_cnt_prst12(1), + .c_cnt_ph_mux_prst12(0), + .c_cnt_in_src12("ph_mux_clk"), + .c_cnt_bypass_en12("true"), + .c_cnt_odd_div_duty_en12("false"), + .c_cnt_hi_div13(1), + .c_cnt_lo_div13(1), + .c_cnt_prst13(1), + .c_cnt_ph_mux_prst13(0), + .c_cnt_in_src13("ph_mux_clk"), + .c_cnt_bypass_en13("true"), + .c_cnt_odd_div_duty_en13("false"), + .c_cnt_hi_div14(1), + .c_cnt_lo_div14(1), + .c_cnt_prst14(1), + .c_cnt_ph_mux_prst14(0), + .c_cnt_in_src14("ph_mux_clk"), + .c_cnt_bypass_en14("true"), + .c_cnt_odd_div_duty_en14("false"), + .c_cnt_hi_div15(1), + .c_cnt_lo_div15(1), + .c_cnt_prst15(1), + .c_cnt_ph_mux_prst15(0), + .c_cnt_in_src15("ph_mux_clk"), + .c_cnt_bypass_en15("true"), + .c_cnt_odd_div_duty_en15("false"), + .c_cnt_hi_div16(1), + .c_cnt_lo_div16(1), + .c_cnt_prst16(1), + .c_cnt_ph_mux_prst16(0), + .c_cnt_in_src16("ph_mux_clk"), + .c_cnt_bypass_en16("true"), + .c_cnt_odd_div_duty_en16("false"), + .c_cnt_hi_div17(1), + .c_cnt_lo_div17(1), + .c_cnt_prst17(1), + .c_cnt_ph_mux_prst17(0), + .c_cnt_in_src17("ph_mux_clk"), + .c_cnt_bypass_en17("true"), + .c_cnt_odd_div_duty_en17("false"), + .pll_vco_div(2), + .pll_cp_current(20), + .pll_bwctrl(4000), + .pll_output_clk_frequency("445.499999 MHz"), + .pll_fractional_division("3908420153"), + .mimic_fbclk_type("none"), + .pll_fbclk_mux_1("glb"), + .pll_fbclk_mux_2("m_cnt"), + .pll_m_cnt_in_src("ph_mux_clk"), + .pll_slf_rst("true") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_0}), + .locked (locked), + .reconfig_to_pll (reconfig_to_pll), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk), + .reconfig_from_pll (reconfig_from_pll) + ); +endmodule + diff --git a/sys/pll_hdmi_adj.vhd b/sys/pll_hdmi_adj.vhd new file mode 100644 index 0000000..67287cb --- /dev/null +++ b/sys/pll_hdmi_adj.vhd @@ -0,0 +1,433 @@ +-------------------------------------------------------------------------------- +-- HDMI PLL Adjust +-------------------------------------------------------------------------------- + +-- Changes the HDMI PLL frequency according to the scaler suggestions. +-------------------------------------------- +-- LLTUNE : +-- 0 : Input Display Enable +-- 1 : Input Vsync +-- 2 : Input Interlaced mode +-- 3 : Input Interlaced field +-- 4 : Output Image frame +-- 5 : +-- 6 : Input clock +-- 7 : Output clock + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY pll_hdmi_adj IS + PORT ( + -- Scaler + llena : IN std_logic; -- 0=Disabled 1=Enabled + lltune : IN unsigned(15 DOWNTO 0); -- Outputs from scaler + + locked : OUT std_logic; + + -- Signals from reconfig commands + i_waitrequest : OUT std_logic; + i_write : IN std_logic; + i_address : IN unsigned(5 DOWNTO 0); + i_writedata : IN unsigned(31 DOWNTO 0); + + -- Outputs to PLL_HDMI_CFG + o_waitrequest : IN std_logic; + o_write : OUT std_logic; + o_address : OUT unsigned(5 DOWNTO 0); + o_writedata : OUT unsigned(31 DOWNTO 0); + + ------------------------------------ + clk : IN std_logic; + reset_na : IN std_logic + ); + +BEGIN + + +END ENTITY pll_hdmi_adj; + +--############################################################################## + +ARCHITECTURE rtl OF pll_hdmi_adj IS + + SIGNAL i_clk,i_de,i_de2,i_vss,i_vss2,i_vss_delay,i_ce : std_logic; + SIGNAL i_linecpt,i_line : natural RANGE 0 TO 2**12-1; + SIGNAL i_delay : natural RANGE 0 TO 2**14-1; + + SIGNAL pwrite : std_logic; + SIGNAL paddress : unsigned(5 DOWNTO 0); + SIGNAL pdata : unsigned(31 DOWNTO 0); + TYPE enum_state IS (sIDLE,sW1,sW2,sW3,sW4,sW5,sW6); + SIGNAL state : enum_state; + SIGNAL tune_freq,tune_phase : unsigned(5 DOWNTO 0); + SIGNAL lltune_sync,lltune_sync2,lltune_sync3 : unsigned(15 DOWNTO 0); + SIGNAL mfrac,mfrac_mem,mfrac_ref,diff : unsigned(40 DOWNTO 0); + SIGNAL mul : unsigned(15 DOWNTO 0); + SIGNAL sign,sign_pre : std_logic; + SIGNAL expand : boolean; + SIGNAL up,modo,phm,dir : std_logic; + SIGNAL cpt : natural RANGE 0 TO 3; + SIGNAL col : natural RANGE 0 TO 15; + + SIGNAL icpt,ocpt,o2cpt,ssh,ofsize,ifsize : natural RANGE 0 TO 2**24-1; + SIGNAL ivss,ivss2,itog : std_logic; + SIGNAL ovss,ovss2,otog : std_logic; + SIGNAL sync,pulse,los,lop : std_logic; + SIGNAL osize,offset,osizep,offsetp : signed(23 DOWNTO 0); + SIGNAL logcpt : natural RANGE 0 TO 31; + SIGNAL udiff : integer RANGE -2**23 TO 2**23-1 :=0; + +BEGIN + + ---------------------------------------------------------------------------- + -- 4 lines delay to input + i_vss<=lltune(0); + i_de <=lltune(1); + i_ce <=lltune(5); + i_clk<=lltune(6); + + Delay:PROCESS(i_clk) IS + BEGIN + IF rising_edge(i_clk) THEN + IF i_ce='1' THEN + -- Measure input line time. + i_de2<=i_de; + + IF i_de='1' AND i_de2='0' THEN + i_linecpt<=0; + IF i_vss='1' THEN + i_line<=i_linecpt; + END IF; + ELSE + i_linecpt<=i_linecpt+1; + END IF; + + -- Delay 4 lines + i_vss2<=i_vss; + IF i_vss/=i_vss2 THEN + i_delay<=0; + ELSIF i_delay=i_line * 4 THEN + i_vss_delay<=i_vss; + ELSE + i_delay<=i_delay+1; + END IF; + END IF; + END IF; + END PROCESS Delay; + + ---------------------------------------------------------------------------- + -- Sample image sizes + Sampler:PROCESS(clk,reset_na) IS + BEGIN + IF reset_na='0' THEN +--pragma synthesis_off + otog<='0'; + itog<='0'; + ivss<='0'; + ivss2<='0'; + ovss<='0'; + ovss2<='0'; +--pragma synthesis_on + + ELSIF rising_edge(clk) THEN + -- Clock domain crossing + + ivss<=i_vss_delay; -- + ivss2<=ivss; + + ovss<=lltune(4); -- + ovss2<=ovss; + + otog<=otog XOR (ovss AND NOT ovss2); + + -- Measure output frame time + IF ovss='1' AND ovss2='0' AND otog='1' THEN + ocpt<=0; + osizep<=to_signed(ocpt,24); + ELSE + ocpt<=ocpt+1; + END IF; + IF ovss='0' AND ovss2='1' AND otog='0' THEN + o2cpt<=0; + ELSE + o2cpt<=o2cpt+1; + END IF; + + -- Measure output image time + IF ovss='0' AND ovss2='1' AND otog='0' THEN + ofsize<=ocpt; + END IF; + + itog<=itog XOR (ivss AND NOT ivss2); + + -- Measure input frame time + IF ivss='1' AND ivss2='0' AND itog='1' THEN + icpt<=0; + osize<=osizep; + udiff<=integer(to_integer(osizep)) - integer(icpt); + sync<='1'; + ELSE + icpt<=icpt+1; + sync<='0'; + END IF; + + -- Measure input image time + IF ivss='0' AND ivss2='1' AND itog='0' THEN + ifsize<=icpt; + END IF; + + expand<=(ofsize>=ifsize); + -- IN | ######### | EXPAND = 1 + -- OUT | ############# | + + -- IN | ######### | EXPAND = 0 + -- OUT | ###### | + + IF expand THEN + IF ivss='1' AND ivss2='0' AND itog='1' THEN + offset<=to_signed(ocpt,24); + END IF; + ELSE + IF ivss='0' AND ivss2='1' AND itog='0' THEN + offset<=to_signed(o2cpt,24); + END IF; + END IF; + + -------------------------------------------- + pulse<='0'; + IF sync='1' THEN + logcpt<=0; + ssh<=to_integer(osize); + los<='0'; + lop<='0'; + + ELSIF logcpt<24 THEN + -- Frequency difference + IF udiff>0 AND ssh=osize/2 AND ssh<(osize-offset) AND lop='0' THEN + tune_phase<='1' & to_unsigned(logcpt,5); + lop<='1'; + END IF; + ssh<=ssh/2; + logcpt<=logcpt+1; + + ELSIF logcpt=24 THEN + pulse<='1'; + ssh<=ssh/2; + logcpt<=logcpt+1; + END IF; + + END IF; + END PROCESS Sampler; + + ---------------------------------------------------------------------------- + -- 000010 : Start reg "Write either 0 or 1 to start fractional PLL reconf. + -- 000100 : M counter + -- 000111 : M counter Fractional Value K + + Comb:PROCESS(i_write,i_address, + i_writedata,pwrite,paddress,pdata) IS + BEGIN + IF i_write='1' THEN + o_write <=i_write; + o_address <=i_address; + o_writedata <=i_writedata; + ELSE + o_write <=pwrite; + o_address <=paddress; + o_writedata<=pdata; + END IF; + END PROCESS Comb; + + i_waitrequest<=o_waitrequest WHEN state=sIDLE ELSE '0'; + + ---------------------------------------------------------------------------- + Schmurtz:PROCESS(clk,reset_na) IS + VARIABLE off_v,ofp_v : natural RANGE 0 TO 63; + VARIABLE diff_v : unsigned(40 DOWNTO 0); + VARIABLE mulco : unsigned(15 DOWNTO 0); + VARIABLE up_v,sign_v : std_logic; + BEGIN + IF reset_na='0' THEN + modo<='0'; + state<=sIDLE; + ELSIF rising_edge(clk) THEN + ------------------------------------------------------ + -- Snoop accesses to PLL reconfiguration + IF i_address="000100" AND i_write='1' THEN + mfrac (40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mfrac_ref(40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mfrac_mem(40 DOWNTO 32)<=('0' & i_writedata(15 DOWNTO 8)) + + ('0' & i_writedata(7 DOWNTO 0)); + mul<=i_writedata(15 DOWNTO 0); + modo<='1'; + END IF; + + IF i_address="000111" AND i_write='1' THEN + mfrac (31 DOWNTO 0)<=i_writedata; + mfrac_ref(31 DOWNTO 0)<=i_writedata; + mfrac_mem(31 DOWNTO 0)<=i_writedata; + modo<='1'; + END IF; + + ------------------------------------------------------ + -- Tuning + off_v:=to_integer('0' & tune_freq(4 DOWNTO 0)); + ofp_v:=to_integer('0' & tune_phase(4 DOWNTO 0)); + --IF off_v<8 THEN off_v:=8; END IF; + --IF ofp_v<7 THEN ofp_v:=7; END IF; + IF off_v<4 THEN off_v:=4; END IF; + IF ofp_v<4 THEN ofp_v:=4; END IF; + + IF off_v>=18 AND ofp_v>=18 THEN + locked<=llena; + ELSE + locked<='0'; + END IF; + + up_v:='0'; + IF pulse='1' THEN + cpt<=(cpt+1) MOD 4; + IF llena='0' THEN + -- Recover original freq when disabling low lag mode + cpt<=0; + col<=0; + IF modo='1' THEN + mfrac<=mfrac_mem; + mfrac_ref<=mfrac_mem; + up<='1'; + modo<='0'; + END IF; + + ELSIF phm='0' AND cpt=0 THEN + -- Frequency adjust + sign_v:=tune_freq(5); + IF col<10 THEN col<=col+1; END IF; + IF off_v>=16 AND col>=10 THEN + phm<='1'; + col<=0; + ELSE + off_v:=off_v+1; + IF off_v>17 THEN + off_v:=off_v + 3; + END IF; + up_v:='1'; + up<='1'; + END IF; + + ELSIF cpt=0 THEN + -- Phase adjust + sign_v:=NOT tune_phase(5); + col<=col+1; + IF col>=10 THEN + phm<='0'; + up_v:='1'; + off_v:=31; + col<=0; + ELSE + off_v:=ofp_v + 1; + IF ofp_v>7 THEN + off_v:=off_v + 1; + END IF; + IF ofp_v>14 THEN + off_v:=off_v + 2; + END IF; + IF ofp_v>17 THEN + off_v:=off_v + 3; + END IF; + up_v:='1'; + END IF; + up<='1'; + END IF; + END IF; + + diff_v:=shift_right(mfrac_ref,off_v); + IF sign_v='0' THEN + diff_v:=mfrac_ref + diff_v; + ELSE + diff_v:=mfrac_ref - diff_v; + END IF; + + IF up_v='1' THEN + mfrac<=diff_v; + END IF; + + IF up_v='1' AND phm='0' THEN + mfrac_ref<=diff_v; + END IF; + + ------------------------------------------------------ + -- Update PLL registers + mulco:=mfrac(40 DOWNTO 33) & (mfrac(40 DOWNTO 33) + ('0' & mfrac(32))); + + CASE state IS + WHEN sIDLE => + pwrite<='0'; + IF up='1' THEN + up<='0'; + IF mulco/=mul THEN + state<=sW1; + ELSE + state<=sW3; + END IF; + END IF; + + WHEN sW1 => -- Change M multiplier + mul<=mulco; + pdata<=x"0000" & mulco; + paddress<="000100"; + pwrite<='1'; + state<=sW2; + + WHEN sW2 => + IF pwrite='1' AND o_waitrequest='0' THEN + state<=sW3; + pwrite<='0'; + END IF; + + WHEN sW3 => -- Change M fractional value + pdata<=mfrac(31 DOWNTO 0); + paddress<="000111"; + pwrite<='1'; + state<=sW4; + + WHEN sW4 => + IF pwrite='1' AND o_waitrequest='0' THEN + state<=sW5; + pwrite<='0'; + END IF; + + WHEN sW5 => + pdata<=x"0000_0001"; + paddress<="000010"; + pwrite<='1'; + state<=sW6; + + WHEN sW6 => + IF pwrite='1' AND o_waitrequest='0' THEN + pwrite<='0'; + state<=sIDLE; + END IF; + END CASE; + + END IF; + END PROCESS Schmurtz; + + ---------------------------------------------------------------------------- + +END ARCHITECTURE rtl; + diff --git a/sys/pll_q13.qip b/sys/pll_q13.qip new file mode 100644 index 0000000..13a7ed4 --- /dev/null +++ b/sys/pll_q13.qip @@ -0,0 +1,6 @@ +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll.13.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_hdmi.13.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_audio.13.qip ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg/altera_pll_reconfig_core.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) pll_cfg/altera_pll_reconfig_top.v ] diff --git a/sys/pll_q17.qip b/sys/pll_q17.qip new file mode 100644 index 0000000..85cc84b --- /dev/null +++ b/sys/pll_q17.qip @@ -0,0 +1,4 @@ +set_global_assignment -name QIP_FILE rtl/pll.qip +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_hdmi.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_audio.qip ] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) pll_cfg.qip ] diff --git a/sys/scandoubler.v b/sys/scandoubler.v index 46274f5..81e7c3f 100644 --- a/sys/scandoubler.v +++ b/sys/scandoubler.v @@ -2,7 +2,7 @@ // scandoubler.v // // Copyright (c) 2015 Till Harbaum -// Copyright (c) 2017 Sorgelig +// Copyright (c) 2017-2021 Alexey Melnikov // // This source file is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published @@ -22,24 +22,21 @@ module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) ( // system interface - input clk_sys, - input ce_pix, - output ce_pix_out, - + input clk_vid, input hq2x, // shifter video interface + input ce_pix, input hs_in, input vs_in, input hb_in, input vb_in, - input [DWIDTH:0] r_in, input [DWIDTH:0] g_in, input [DWIDTH:0] b_in, - input mono, // output interface + output ce_pix_out, output reg hs_out, output vs_out, output hb_out, @@ -49,141 +46,166 @@ module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) output [DWIDTH:0] b_out ); - localparam DWIDTH = HALF_DEPTH ? 3 : 7; -assign vs_out = vso[3]; -assign ce_pix_out = hq2x ? ce_x4 : ce_x2; - -//Compensate picture shift after HQ2x -assign vb_out = vbo[2]; -assign hb_out = hbo[6]; - reg [7:0] pix_len = 0; wire [7:0] pl = pix_len + 1'b1; -reg ce_x1, ce_x4, ce_x2; -always @(negedge clk_sys) begin - reg old_ce; - reg [2:0] ce_cnt; +reg [7:0] pix_in_cnt = 0; +wire [7:0] pc_in = pix_in_cnt + 1'b1; +reg [7:0] pixsz, pixsz2, pixsz4 = 0; - reg [7:0] pixsz2, pixsz4 = 0; +reg ce_x4i, ce_x1i; +always @(posedge clk_vid) begin + reg old_ce, valid, hs; + + if(~&pix_len) pix_len <= pl; + if(~&pix_in_cnt) pix_in_cnt <= pc_in; + + ce_x4i <= 0; + ce_x1i <= 0; + + // use such odd comparison to place ce_x4 evenly if master clock isn't multiple of 4. + if((pc_in == pixsz4) || (pc_in == pixsz2) || (pc_in == (pixsz2+pixsz4))) ce_x4i <= 1; old_ce <= ce_pix; - if(~&pix_len) pix_len <= pix_len + 1'd1; - - ce_x4 <= 0; - ce_x2 <= 0; - ce_x1 <= 0; - - // use such odd comparison to place ce_x4 evenly if master clock isn't multiple 4. - if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin - ce_x4 <= 1; - end - - if(pl == pixsz2) begin - ce_x2 <= 1; - end - if(~old_ce & ce_pix) begin - pixsz2 <= {1'b0, pl[7:1]}; - pixsz4 <= {2'b00, pl[7:2]}; - ce_x1 <= 1; - ce_x2 <= 1; - ce_x4 <= 1; + if(valid & ~hb_in & ~vb_in) begin + pixsz <= pl; + pixsz2 <= {1'b0, pl[7:1]}; + pixsz4 <= {2'b00, pl[7:2]}; + end pix_len <= 0; + valid <= 1; + end + + hs <= hs_in; + if((~hs & hs_in) || (pc_in >= pixsz)) begin + ce_x4i <= 1; + ce_x1i <= 1; + pix_in_cnt <= 0; + end + + if(hb_in | vb_in) valid <= 0; +end + +reg req_line_reset; +reg [DWIDTH:0] r_d, g_d, b_d; +always @(posedge clk_vid) begin + if(ce_x1i) begin + req_line_reset <= hb_in; + r_d <= r_in; + g_d <= g_in; + b_d <= b_in; end end Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x ( - .clk(clk_sys), - .ce_x4(ce_x4), + .clk(clk_vid), + + .ce_in(ce_x4i), .inputpixel({b_d,g_d,r_d}), - .mono(mono), .disable_hq2x(~hq2x), - .reset_frame(vs_in), + .reset_frame(vb_in), .reset_line(req_line_reset), + + .ce_out(ce_x4o), .read_y(sd_line), - .hblank(hbo[0]&hbo[4]), + .hblank(hbo[0]&hbo[8]), .outpixel({b_out,g_out,r_out}) ); -reg [1:0] sd_line; -reg [2:0] vbo; -reg [6:0] hbo; +reg [7:0] pix_out_cnt = 0; +wire [7:0] pc_out = pix_out_cnt + 1'b1; -reg [DWIDTH:0] r_d; -reg [DWIDTH:0] g_d; -reg [DWIDTH:0] b_d; +reg ce_x4o, ce_x2o; +always @(posedge clk_vid) begin + reg hs; -reg [3:0] vso; + if(~&pix_out_cnt) pix_out_cnt <= pc_out; -reg req_line_reset; -always @(posedge clk_sys) begin + ce_x4o <= 0; + ce_x2o <= 0; - reg [11:0] hs_max,hs_rise; - reg [10:0] hcnt; - reg [11:0] sd_hcnt; - reg [11:0] hde_start, hde_end; + // use such odd comparison to place ce_x4 evenly if master clock isn't multiple of 4. + if((pc_out == pixsz4) || (pc_out == pixsz2) || (pc_out == (pixsz2+pixsz4))) ce_x4o <= 1; + if( pc_out == pixsz2) ce_x2o <= 1; - reg hs, hs2, vs, hb; - - if(ce_x1) begin - hs <= hs_in; - hb <= hb_in; - - req_line_reset <= hb_in; - - r_d <= r_in; - g_d <= g_in; - b_d <= b_in; - - if(hb && !hb_in) begin - hde_start <= {hcnt,1'b0}; - vbo <= {vbo[1:0], vb_in}; - end - if(!hb && hb_in) hde_end <= {hcnt,1'b0}; - - // falling edge of hsync indicates start of line - if(hs && !hs_in) begin - vso <= (vso<<1) | vs_in; - hs_max <= {hcnt,1'b1}; - hcnt <= 0; - end else begin - hcnt <= hcnt + 1'd1; - end - - // save position of rising edge - if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; - - vs <= vs_in; - if(vs && ~vs_in) sd_line <= 0; - end - - if(ce_x4) begin - hs2 <= hs_in; - hbo[6:1] <= hbo[5:0]; - - // output counter synchronous to input and at twice the rate - sd_hcnt <= sd_hcnt + 1'd1; - - if(hs2 && !hs_in) sd_hcnt <= hs_max; - if(sd_hcnt == hs_max) sd_hcnt <= 0; - - - //prepare to read in advance - if(sd_hcnt == (hde_start-2)) begin - sd_line <= sd_line + 1'd1; - end - - if(sd_hcnt == hde_start) hbo[0] <= 0; - if(sd_hcnt == hde_end) hbo[0] <= 1; - - // replicate horizontal sync at twice the speed - if(sd_hcnt == hs_max) hs_out <= 0; - if(sd_hcnt == hs_rise) hs_out <= 1; + hs <= hs_out; + if((~hs & hs_out) || (pc_out >= pixsz)) begin + ce_x2o <= 1; + ce_x4o <= 1; + pix_out_cnt <= 0; end end +reg [1:0] sd_line; +reg [3:0] vbo; +reg [3:0] vso; +reg [8:0] hbo; +always @(posedge clk_vid) begin + + reg [31:0] hcnt; + reg [30:0] sd_hcnt; + reg [30:0] hs_start, hs_end; + reg [30:0] hde_start, hde_end; + + reg hs, hb; + + if(ce_x4o) begin + hbo[8:1] <= hbo[7:0]; + end + + // output counter synchronous to input and at twice the rate + sd_hcnt <= sd_hcnt + 1'd1; + if(sd_hcnt == hde_start) begin + sd_hcnt <= 0; + vbo[3:1] <= vbo[2:0]; + end + + if(sd_hcnt == hs_end) begin + sd_line <= sd_line + 1'd1; + if(&vbo[3:2]) sd_line <= 1; + vso[3:1] <= vso[2:0]; + end + + if(sd_hcnt == hde_start)hbo[0] <= 0; + if(sd_hcnt == hde_end) hbo[0] <= 1; + + // replicate horizontal sync at twice the speed + if(sd_hcnt == hs_end) hs_out <= 0; + if(sd_hcnt == hs_start) hs_out <= 1; + + hs <= hs_in; + hb <= hb_in; + + hcnt <= hcnt + 1'd1; + if(hb && !hb_in) begin + hde_start <= hcnt[31:1]; + hbo[0] <= 0; + hcnt <= 0; + sd_hcnt <= 0; + vbo <= {vbo[2:0],vb_in}; + end + + if(!hb && hb_in) hde_end <= hcnt[31:1]; + + // falling edge of hsync indicates start of line + if(hs && !hs_in) begin + hs_end <= hcnt[31:1]; + vso[0] <= vs_in; + end + + // save position of rising edge + if(!hs && hs_in) hs_start <= hcnt[31:1]; +end + +assign vs_out = vso[3]; +assign ce_pix_out = hq2x ? ce_x4o : ce_x2o; + +//Compensate picture shift after HQ2x +assign vb_out = vbo[3]; +assign hb_out = hbo[6]; + endmodule diff --git a/sys/scanlines.v b/sys/scanlines.v new file mode 100644 index 0000000..59d29bd --- /dev/null +++ b/sys/scanlines.v @@ -0,0 +1,67 @@ +module scanlines #(parameter v2=0) +( + input clk, + + input [1:0] scanlines, + input [23:0] din, + input hs_in,vs_in, + input de_in, + + output reg [23:0] dout, + output reg hs_out,vs_out, + output reg de_out +); + +reg [1:0] scanline; +always @(posedge clk) begin + reg old_hs, old_vs; + + old_hs <= hs_in; + old_vs <= vs_in; + + if(old_hs && ~hs_in) begin + if(v2) begin + scanline <= scanline + 1'd1; + if (scanline == scanlines) scanline <= 0; + end + else scanline <= scanline ^ scanlines; + end + if(old_vs && ~vs_in) scanline <= 0; +end + +wire [7:0] r,g,b; +assign {r,g,b} = din; + +reg [23:0] d; +always @(*) begin + case(scanline) + 1: // reduce 25% = 1/2 + 1/4 + d = {{1'b0, r[7:1]} + {2'b00, r[7:2]}, + {1'b0, g[7:1]} + {2'b00, g[7:2]}, + {1'b0, b[7:1]} + {2'b00, b[7:2]}}; + + 2: // reduce 50% = 1/2 + d = {{1'b0, r[7:1]}, + {1'b0, g[7:1]}, + {1'b0, b[7:1]}}; + + 3: // reduce 75% = 1/4 + d = {{2'b00, r[7:2]}, + {2'b00, g[7:2]}, + {2'b00, b[7:2]}}; + + default: d = {r,g,b}; + endcase +end + +always @(posedge clk) begin + reg [23:0] dout1, dout2; + reg de1,de2,vs1,vs2,hs1,hs2; + + dout <= dout2; dout2 <= dout1; dout1 <= d; + vs_out <= vs2; vs2 <= vs1; vs1 <= vs_in; + hs_out <= hs2; hs2 <= hs1; hs1 <= hs_in; + de_out <= de2; de2 <= de1; de1 <= de_in; +end + +endmodule diff --git a/sys/sd_card.sv b/sys/sd_card.sv new file mode 100644 index 0000000..8cb0560 --- /dev/null +++ b/sys/sd_card.sv @@ -0,0 +1,463 @@ +// +// sd_card.v +// +// Copyright (c) 2014 Till Harbaum +// Copyright (c) 2015-2018 Sorgelig +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the Lesser GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// http://elm-chan.org/docs/mmc/mmc_e.html +// +///////////////////////////////////////////////////////////////////////// + +// +// Made module syncrhronous. Total code refactoring. (Sorgelig) +// clk_spi must be at least 2 x sck for proper work. + +module sd_card #(parameter WIDE = 0, OCTAL=0) +( + input clk_sys, + input reset, + + input sdhc, + input img_mounted, + input [63:0] img_size, + + output reg [31:0] sd_lba, + output reg sd_rd, + output reg sd_wr, + input sd_ack, + + input [AW:0] sd_buff_addr, + input [DW:0] sd_buff_dout, + output [DW:0] sd_buff_din, + input sd_buff_wr, + + // SPI interface + input clk_spi, + + input ss, + input sck, + input [SW:0] mosi, + output reg [SW:0] miso +); + +localparam AW = WIDE ? 7 : 8; +localparam DW = WIDE ? 15 : 7; +localparam SZ = OCTAL ? 8 : 1; +localparam SW = SZ-1; + +wire [7:0] DATA_TOKEN_CMD25 = 8'hfc; +wire [7:0] STOP_TRAN = 8'hfd; +wire [7:0] DATA_TOKEN = 8'hfe; +wire [7:0] WRITE_DATA_RESPONSE = 8'h05; + +// number of bytes to wait after a command before sending the reply +localparam NCR = 5+3; // 5 bytes are required (command length) + +localparam RD_STATE_IDLE = 0; +localparam RD_STATE_START = 1; +localparam RD_STATE_WAIT_IO = 2; +localparam RD_STATE_SEND_TOKEN = 3; +localparam RD_STATE_SEND_DATA = 4; +localparam RD_STATE_WAIT_M = 5; + +localparam WR_STATE_IDLE = 0; +localparam WR_STATE_EXP_DTOKEN = 1; +localparam WR_STATE_RECV_DATA = 2; +localparam WR_STATE_RECV_CRC0 = 3; +localparam WR_STATE_RECV_CRC1 = 4; +localparam WR_STATE_SEND_DRESP = 5; +localparam WR_STATE_BUSY = 6; + +localparam PREF_STATE_IDLE = 0; +localparam PREF_STATE_RD = 1; +localparam PREF_STATE_FINISH = 2; + +altsyncram sdbuf +( + .clock0 (clk_sys), + .address_a ({sd_buf,sd_buff_addr}), + .data_a (sd_buff_dout), + .wren_a (sd_ack & sd_buff_wr), + .q_a (sd_buff_din), + + .clock1 (clk_spi), + .address_b ({spi_buf,buffer_ptr}), + .data_b (buffer_din), + .wren_b (buffer_wr), + .q_b (buffer_dout), + + .aclr0(1'b0), + .aclr1(1'b0), + .addressstall_a(1'b0), + .addressstall_b(1'b0), + .byteena_a(1'b1), + .byteena_b(1'b1), + .clocken0(1'b1), + .clocken1(1'b1), + .clocken2(1'b1), + .clocken3(1'b1), + .eccstatus(), + .rden_a(1'b1), + .rden_b(1'b1) +); +defparam + sdbuf.numwords_a = 1<<(AW+3), + sdbuf.widthad_a = AW+3, + sdbuf.width_a = DW+1, + sdbuf.numwords_b = 2048, + sdbuf.widthad_b = 11, + sdbuf.width_b = 8, + sdbuf.address_reg_b = "CLOCK1", + sdbuf.clock_enable_input_a = "BYPASS", + sdbuf.clock_enable_input_b = "BYPASS", + sdbuf.clock_enable_output_a = "BYPASS", + sdbuf.clock_enable_output_b = "BYPASS", + sdbuf.indata_reg_b = "CLOCK1", + sdbuf.intended_device_family = "Cyclone V", + sdbuf.lpm_type = "altsyncram", + sdbuf.operation_mode = "BIDIR_DUAL_PORT", + sdbuf.outdata_aclr_a = "NONE", + sdbuf.outdata_aclr_b = "NONE", + sdbuf.outdata_reg_a = "UNREGISTERED", + sdbuf.outdata_reg_b = "UNREGISTERED", + sdbuf.power_up_uninitialized = "FALSE", + sdbuf.read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ", + sdbuf.read_during_write_mode_port_b = "NEW_DATA_NO_NBE_READ", + sdbuf.width_byteena_a = 1, + sdbuf.width_byteena_b = 1, + sdbuf.wrcontrol_wraddress_reg_b = "CLOCK1"; + +reg [26:0] csd_size; +reg csd_sdhc; +always @(posedge clk_sys) begin + if (img_mounted) begin + csd_sdhc <= sdhc; + if (sdhc) begin + csd_size[0] <= 0; + csd_size[22:1] <= img_size[40:19]; // in 512K units + csd_size[26:23] <= 0; + end + else begin + csd_size[2:0] <= 7; // C_SIZE_MULT + csd_size[14:3] <= 12'b101101101101; + csd_size[26:15] <= img_size[29:18]; // in 256K units ((2**(C_SIZE_MULT+2))*512) + end + end +end + +wire [127:0] CSD = {1'b0,csd_sdhc,6'h00,8'h0e,8'h00,8'h32,8'h5b,8'h59,6'h00,csd_size,7'h7f,8'h80,8'h0a,8'h40,8'h40,8'hf1}; +wire [127:0] CID = {8'hcd,8'hc7,8'h00,8'h93,8'h6f,8'h2f,8'h73,8'h00,8'h00,8'h44,8'h32,8'h38,8'h34,8'h00,8'h00,8'h3e}; + +reg [8:0] buffer_ptr; +reg [7:0] buffer_din; +wire [7:0] buffer_dout; +reg buffer_wr; + +reg [1:0] sd_buf, spi_buf; + +reg [6:0] sbuf; +reg [2:0] bit_cnt; + +wire last_bit = &bit_cnt || OCTAL; +wire [7:0] ibuf = OCTAL ? mosi : {sbuf,mosi[0]}; + +always @(posedge clk_spi) begin + reg [2:0] read_state; + reg [2:0] write_state; + reg [1:0] pref_state; + reg [5:0] cmd; + reg cmd55; + reg [39:0] reply; + reg [3:0] byte_cnt; + reg old_sck; + reg [2:0] ack; + reg [2:0] wait_m_cnt; + reg [31:0] arg; + + ack[1:0] <= {ack[0],sd_ack}; + if(ack[1] == ack[0]) ack[2] <= ack[1]; + + if(~ack[2] & ack[1]) {sd_rd,sd_wr} <= 0; + if( ack[2] & ~ack[1]) begin + sd_buf <= sd_buf + 1'd1; + sd_lba <= sd_lba + 1; + end + + buffer_wr <= 0; + + if(reset) begin + bit_cnt <= 0; + byte_cnt <= '1; + miso <= '1; + cmd <= 0; + sd_wr <= 0; + sd_rd <= 0; + read_state <= RD_STATE_IDLE; + write_state <= WR_STATE_IDLE; + pref_state <= PREF_STATE_IDLE; + end + else begin + + if(buffer_wr) begin + if(~&buffer_ptr) buffer_ptr <= buffer_ptr + 1'd1; + else begin + spi_buf <= spi_buf + 1'd1; + sd_wr <= 1; + end + end + + case(pref_state) + PREF_STATE_IDLE: + if(((sd_buf - spi_buf) <= 1) && (read_state != RD_STATE_IDLE) && (cmd == 17 || cmd == 18)) begin + sd_rd <= 1; + pref_state <= PREF_STATE_RD; + end + + PREF_STATE_RD: + if(read_state == RD_STATE_IDLE) begin + pref_state <= PREF_STATE_IDLE; + end + else if(ack[2] & ~ack[1]) begin + pref_state <= (cmd == 18) ? PREF_STATE_IDLE : PREF_STATE_FINISH; + end + + PREF_STATE_FINISH: + if(read_state == RD_STATE_IDLE) begin + pref_state <= PREF_STATE_IDLE; + end + endcase + + old_sck <= sck; + if(ss) begin + bit_cnt <= 0; + byte_cnt <= '1; + miso <= '1; + end + else if(old_sck & ~sck) begin + miso <= '1; // default: send 1's (busy/wait) + if(byte_cnt >= NCR) {miso,reply} <= {reply, {SZ{1'b1}}}; + + // ---------- read state machine processing ------------- + case(read_state) + RD_STATE_IDLE: ; + + RD_STATE_START: begin + if(byte_cnt == NCR && last_bit) read_state <= (cmd == 9 || cmd == 10) ? RD_STATE_SEND_TOKEN : RD_STATE_WAIT_IO; + end + + // waiting for io controller to return data + RD_STATE_WAIT_IO: begin + if(sd_buf != spi_buf && last_bit) read_state <= RD_STATE_SEND_TOKEN; + end + + // send data token + RD_STATE_SEND_TOKEN: begin + miso <= DATA_TOKEN[~bit_cnt -:SZ]; + if(last_bit) begin + read_state <= RD_STATE_SEND_DATA; // next: send data + buffer_ptr <= 0; + end + end + + // send data + RD_STATE_SEND_DATA: begin + + miso <= (cmd == 9) ? CSD[{buffer_ptr[3:0],~bit_cnt} -:SZ] : (cmd == 10) ? CID[{buffer_ptr[3:0],~bit_cnt} -:SZ] : buffer_dout[~bit_cnt -:SZ]; + + if(last_bit) begin + + // sent 512 sector data bytes? + if(cmd == 17 && &buffer_ptr) read_state <= RD_STATE_IDLE; + else if(cmd == 18 && &buffer_ptr) begin + read_state <= RD_STATE_WAIT_M; + wait_m_cnt <= 0; + end + + // sent 16 cid/csd data bytes? + else if((cmd == 9 || cmd == 10) && &buffer_ptr[3:0]) read_state <= RD_STATE_IDLE; + + // not done yet -> trigger read of next data byte + else buffer_ptr <= buffer_ptr + 1'd1; + end + end + + RD_STATE_WAIT_M: begin + if(last_bit) begin + wait_m_cnt <= wait_m_cnt + 1'd1; + if(&wait_m_cnt) begin + spi_buf <= spi_buf + 1'd1; + read_state <= RD_STATE_WAIT_IO; + end + end + end + endcase + + // ------------------ write support ---------------------- + // send write data response + if(write_state == WR_STATE_SEND_DRESP) miso <= WRITE_DATA_RESPONSE[~bit_cnt -:SZ]; + + // busy after write until the io controller sends ack + if(write_state == WR_STATE_BUSY) miso <= 0; + end + else if(~old_sck & sck) begin + + sbuf[6:0] <= {sbuf[5:0],mosi[0]}; + bit_cnt <= bit_cnt + SZ[2:0]; + + if(last_bit) begin + // finished reading one byte + // byte counter runs against 15 byte boundary + if(~&byte_cnt) byte_cnt <= byte_cnt + 1'd1; + + // byte_cnt > 6 -> complete command received + // first byte of valid command is 01xxxxxx + // don't accept new commands once a write or read command has been accepted + if(byte_cnt > 5 && + ((write_state == WR_STATE_IDLE && read_state == RD_STATE_IDLE && ibuf[7:6] == 1) || + (read_state != RD_STATE_IDLE && ibuf == 8'h4c))) begin + byte_cnt <= 0; + cmd <= ibuf[5:0]; + cmd55 <= (cmd == 55); // set cmd55 flag if previous command was 55 + if(ibuf[5:0] == 12) read_state <= RD_STATE_IDLE; + end + + // parse additional command bytes + if(byte_cnt == 0) arg[31:24] <= ibuf; + if(byte_cnt == 1) arg[23:16] <= ibuf; + if(byte_cnt == 2) arg[15:8] <= ibuf; + if(byte_cnt == 3) arg[7:0] <= ibuf; + + // last byte (crc) received, evaluate + if(byte_cnt == 4) begin + + // default: + reply <= 40'h04FFFFFFFF; // illegal command + + case(cmd) + // CMD0: GO_IDLE_STATE + 0: reply[39:32] <= 1; // ok, busy + + // CMD1: SEND_OP_COND + 1: reply[39:32] <= 0; + + // CMD8: SEND_IF_COND (V2 only) + 8: reply <= 40'h01000001AA; // ok, busy + + // CMD9: SEND_CSD + 9, + // CMD10: SEND_CID + 10: begin + reply[39:32] <= 0; + read_state <= RD_STATE_START; + end + + // CMD12: STOP_TRANSMISSION + 12: reply[39:32] <= 0; + + // CMD13: SEND_STATUS + 13: reply[39:24] <= 16'h0000; + + // CMD16: SET_BLOCKLEN + 16: reply[39:32] <= (arg == 512) ? 8'h00 : 8'h40; // we only support a block size of 512 + + // CMD17: READ_SINGLE_BLOCK + 17, + // CMD18: READ_MULTIPLE + 18: begin + reply[39:32] <= 0; + read_state <= RD_STATE_START; + spi_buf <= 0; + sd_buf <= 0; + sd_lba <= csd_sdhc ? arg : {9'd0, arg[31:9]}; + end + + // ACMD23: SET_WR_BLK_ERASE_COUNT + 23: reply[39:32] <= 0; + + // CMD24: WRITE_BLOCK + 24, + // CMD25: WRITE_MULTIPLE + 25: begin + reply[39:32] <= 0; + write_state <= WR_STATE_EXP_DTOKEN; // expect data token + spi_buf <= 0; + sd_buf <= 0; + sd_lba <= csd_sdhc ? arg : {9'd0, arg[31:9]}; + end + + // ACMD41: APP_SEND_OP_COND + 41: if(cmd55) reply[39:32] <= 0; // ok, not busy + + // CMD55: APP_COND + 55: reply[39:32] <= 1; // ok, busy + + // CMD58: READ_OCR + 58: reply <= { 8'h00, 1'b1, csd_sdhc, 30'd0 }; // bit 30 = 1 -> high capacity card + + // CMD59: CRC_ON_OFF + 59: reply[39:32] <= 0; + endcase + end + + // ---------- handle write ----------- + case(write_state) + // do nothing in idle state + WR_STATE_IDLE: ; + + // waiting for data token + WR_STATE_EXP_DTOKEN: begin + buffer_ptr <= 0; + if(cmd == 24) begin + if(ibuf == DATA_TOKEN) write_state <= WR_STATE_RECV_DATA; + end + else begin + if(ibuf == DATA_TOKEN_CMD25) write_state <= WR_STATE_RECV_DATA; + if(ibuf == STOP_TRAN) write_state <= WR_STATE_IDLE; + end + end + + // transfer 512 bytes + WR_STATE_RECV_DATA: begin + // push one byte into local buffer + buffer_wr <= 1; + buffer_din <= ibuf; + + // all bytes written? + if(&buffer_ptr) write_state <= WR_STATE_RECV_CRC0; + end + + // transfer 1st crc byte + WR_STATE_RECV_CRC0: + write_state <= WR_STATE_RECV_CRC1; + + // transfer 2nd crc byte + WR_STATE_RECV_CRC1: + write_state <= WR_STATE_SEND_DRESP; + + // send data response + WR_STATE_SEND_DRESP: + write_state <= WR_STATE_BUSY; + + // wait for io controller to accept data + WR_STATE_BUSY: + if(spi_buf == sd_buf) write_state <= (cmd == 25) ? WR_STATE_EXP_DTOKEN : WR_STATE_IDLE; + endcase + end + end + end +end + +endmodule diff --git a/sys/spdif.v b/sys/spdif.v index 671dcb2..eee2b08 100644 --- a/sys/spdif.v +++ b/sys/spdif.v @@ -31,132 +31,6 @@ // altera message_off 10240 module spdif - -//----------------------------------------------------------------- -// Params -//----------------------------------------------------------------- -#( - parameter CLK_RATE = 50000000, - parameter AUDIO_RATE = 48000, - - // Generated params - parameter WHOLE_CYCLES = (CLK_RATE) / (AUDIO_RATE*128), - parameter ERROR_BASE = 10000, - parameter [63:0] ERRORS_PER_BIT = ((CLK_RATE * ERROR_BASE) / (AUDIO_RATE*128)) - (WHOLE_CYCLES * ERROR_BASE) -) - -//----------------------------------------------------------------- -// Ports -//----------------------------------------------------------------- -( - input clk_i, - input rst_i, - input half_rate, - - // Output - output spdif_o, - - // Audio interface (16-bit x 2 = RL) - input [15:0] audio_r, - input [15:0] audio_l, - output sample_req_o -); - -reg lpf_ce; -always @(negedge clk_i) begin - reg [3:0] div; - - div <= div + 1'd1; - if(div == 13) div <= 0; - - lpf_ce <= !div; -end - -wire [15:0] al, ar; - -lpf48k #(15) lpf_l -( - .RESET(rst_i), - .CLK(clk_i), - .CE(lpf_ce), - .ENABLE(1), - - .IDATA(audio_l), - .ODATA(al) -); - -lpf48k #(15) lpf_r -( - .RESET(rst_i), - .CLK(clk_i), - .CE(lpf_ce), - .ENABLE(1), - - .IDATA(audio_r), - .ODATA(ar) -); - -reg bit_clk_q; - -// Clock pulse generator -always @ (posedge rst_i or posedge clk_i) begin - reg [31:0] count_q; - reg [31:0] error_q; - reg ce; - - if (rst_i) begin - count_q <= 0; - error_q <= 0; - bit_clk_q <= 1; - ce <= 0; - end - else - begin - if(count_q == WHOLE_CYCLES-1) begin - if (error_q < (ERROR_BASE - ERRORS_PER_BIT)) begin - error_q <= error_q + ERRORS_PER_BIT[31:0]; - count_q <= 0; - end else begin - error_q <= error_q + ERRORS_PER_BIT[31:0] - ERROR_BASE; - count_q <= count_q + 1; - end - end else if(count_q == WHOLE_CYCLES) begin - count_q <= 0; - end else begin - count_q <= count_q + 1; - end - - bit_clk_q <= 0; - if(!count_q) begin - ce <= ~ce; - if(~half_rate || ce) bit_clk_q <= 1; - end - end -end - -//----------------------------------------------------------------- -// Core SPDIF -//----------------------------------------------------------------- - -wire [31:0] sample_i = {ar, al}; - -spdif_core -u_core -( - .clk_i(clk_i), - .rst_i(rst_i), - - .bit_out_en_i(bit_clk_q), - - .spdif_o(spdif_o), - - .sample_i(sample_i), - .sample_req_o(sample_req_o) -); - -endmodule - -module spdif_core ( input clk_i, input rst_i, @@ -193,6 +67,8 @@ reg spdif_out_q; reg [5:0] parity_count_q; +reg channel_status_bit_q; + //----------------------------------------------------------------- // Subframe Counter //----------------------------------------------------------------- @@ -268,19 +144,20 @@ assign subframe_w[28] = 1'b0; // Valid assign subframe_w[29] = 1'b0; // Timeslots 30 = Channel status bit -assign subframe_w[30] = 1'b0; +assign subframe_w[30] = channel_status_bit_q ; //was constant 1'b0 enabling copy-bit; // Timeslots 31 = Even Parity bit (31:4) assign subframe_w[31] = 1'b0; //----------------------------------------------------------------- -// Preamble +// Preamble and Channel status bit //----------------------------------------------------------------- -localparam PREAMBLE_Z = 8'b00010111; -localparam PREAMBLE_Y = 8'b00100111; -localparam PREAMBLE_X = 8'b01000111; +localparam PREAMBLE_Z = 8'b00010111; // "B" channel A data at start of block +localparam PREAMBLE_Y = 8'b00100111; // "W" channel B data +localparam PREAMBLE_X = 8'b01000111; // "M" channel A data not at start of block reg [7:0] preamble_r; +reg channel_status_bit_r; always @ * begin @@ -294,13 +171,30 @@ begin // Left Channel (but not start of block)? else preamble_r = PREAMBLE_X; // X(M) + + if (subframe_count_q[8:1] == 8'd2) // frame 2 => subframes 4 and 5 => 0 = copy inhibited, 1 = copy permitted + channel_status_bit_r = 1'b1; + else if (subframe_count_q[8:1] == 8'd15) // frame 15 => 0 = no indication, 1 = original media + channel_status_bit_r = 1'b1; + else if (subframe_count_q[8:1] == 8'd25) // frame 24 to 27 => sample frequency, 0100 = 48kHz, 0000 = 44kHz (l2r) + channel_status_bit_r = 1'b1; + else + channel_status_bit_r = 1'b0; // everything else defaults to 0 end always @ (posedge rst_i or posedge clk_i ) -if (rst_i == 1'b1) - preamble_q <= 8'h00; -else if (load_subframe_q) - preamble_q <= preamble_r; +begin + if (rst_i == 1'b1) + begin + preamble_q <= 8'h00; + channel_status_bit_q <= 1'b0; + end + else if (load_subframe_q) + begin + preamble_q <= preamble_r; + channel_status_bit_q <= channel_status_bit_r; + end +end //----------------------------------------------------------------- // Parity Counter diff --git a/sys/sync_vg.v b/sys/sync_vg.v deleted file mode 100644 index caaf681..0000000 --- a/sys/sync_vg.v +++ /dev/null @@ -1,78 +0,0 @@ -module sync_vg -#( - parameter X_BITS=12, Y_BITS=12 -) -( - input wire clk, - input wire reset, - - input wire [Y_BITS-1:0] v_total, - input wire [Y_BITS-1:0] v_fp, - input wire [Y_BITS-1:0] v_bp, - input wire [Y_BITS-1:0] v_sync, - input wire [X_BITS-1:0] h_total, - input wire [X_BITS-1:0] h_fp, - input wire [X_BITS-1:0] h_bp, - input wire [X_BITS-1:0] h_sync, - input wire [X_BITS-1:0] hv_offset, - - output reg vs_out, - output reg hs_out, - output reg hde_out, - output reg vde_out, - output reg [Y_BITS-1:0] v_count_out, - output reg [X_BITS-1:0] h_count_out, - output reg [X_BITS-1:0] x_out, - output reg [Y_BITS-1:0] y_out -); - -reg [X_BITS-1:0] h_count; -reg [Y_BITS-1:0] v_count; - -/* horizontal counter */ -always @(posedge clk) - if (reset) - h_count <= 0; - else - if (h_count < h_total - 1) - h_count <= h_count + 1'd1; - else - h_count <= 0; - -/* vertical counter */ -always @(posedge clk) - if (reset) - v_count <= 0; - else - if (h_count == h_total - 1) - begin - if (v_count == v_total - 1) - v_count <= 0; - else - v_count <= v_count + 1'd1; - end - -always @(posedge clk) - if (reset) - { vs_out, hs_out, hde_out, vde_out } <= 0; - else begin - hs_out <= ((h_count < h_sync)); - - hde_out <= (h_count >= h_sync + h_bp) && (h_count <= h_total - h_fp - 1); - vde_out <= (v_count >= v_sync + v_bp) && (v_count <= v_total - v_fp - 1); - - if ((v_count == 0) && (h_count == hv_offset)) - vs_out <= 1'b1; - else if ((v_count == v_sync) && (h_count == hv_offset)) - vs_out <= 1'b0; - - /* H_COUNT_OUT and V_COUNT_OUT */ - h_count_out <= h_count; - v_count_out <= v_count; - - /* X and Y coords for a backend pattern generator */ - x_out <= h_count - (h_sync + h_bp); - y_out <= v_count - (v_sync + v_bp); - end - -endmodule diff --git a/sys/sys.qip b/sys/sys.qip index 0d7b675..2854eaf 100644 --- a/sys/sys.qip +++ b/sys/sys.qip @@ -1,24 +1,33 @@ -set_global_assignment -name VERILOG_FILE sys/sys_top.v -#set_global_assignment -name SDC_FILE sys/sys_top.sdc -#set_global_assignment -name QIP_FILE sys/pll.qip -#set_global_assignment -name QIP_FILE sys/pll_hdmi.qip -#set_global_assignment -name QIP_FILE sys/pll_hdmi_cfg.qip -set_global_assignment -name SYSTEMVERILOG_FILE sys/hdmi_lite.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/hq2x.sv -set_global_assignment -name VERILOG_FILE sys/scandoubler.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/video_cleaner.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/video_mixer.sv -set_global_assignment -name VERILOG_FILE sys/osd.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/vga_out.sv -set_global_assignment -name VERILOG_FILE sys/sync_vg.v -set_global_assignment -name VERILOG_FILE sys/pattern_vg.v -set_global_assignment -name VERILOG_FILE sys/i2c.v -set_global_assignment -name VERILOG_FILE sys/i2s.v -set_global_assignment -name VERILOG_FILE sys/spdif.v -set_global_assignment -name VERILOG_FILE sys/sigma_delta_dac.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/lpf48k.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/hdmi_config.sv -set_global_assignment -name SYSTEMVERILOG_FILE sys/sysmem.sv -set_global_assignment -name VERILOG_FILE sys/ip/reset_source.v -set_global_assignment -name SYSTEMVERILOG_FILE sys/vip_config.sv -set_global_assignment -name VERILOG_FILE sys/hps_io.v +set_global_assignment -name QIP_FILE [join [list $::quartus(qip_path) pll_q [regexp -inline {[0-9]+} $quartus(version)] .qip] {}] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) sys_top.v ] +set_global_assignment -name SDC_FILE [file join $::quartus(qip_path) sys_top.sdc ] +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) ascal.vhd ] +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) pll_hdmi_adj.vhd ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) math.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hq2x.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) scandoubler.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) scanlines.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_cleaner.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) gamma_corr.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_mixer.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_freak.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) video_freezer.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) arcade_video.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) osd.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) vga_out.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) i2c.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) alsa.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) i2s.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) spdif.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) audio_out.v ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) iir_filter.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) ltc2308.sv ] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) sigma_delta_dac.v ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) mt32pi.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hdmi_config.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) mcp23009.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) f2sdram_safe_terminator.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) ddr_svc.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sysmem.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) sd_card.sv ] +set_global_assignment -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) hps_io.sv ] diff --git a/sys/sys.tcl b/sys/sys.tcl new file mode 100644 index 0000000..8c10190 --- /dev/null +++ b/sys/sys.tcl @@ -0,0 +1,227 @@ +set_global_assignment -name FAMILY "Cyclone V" +set_global_assignment -name DEVICE 5CSEBA6U23I7 +set_global_assignment -name DEVICE_FILTER_PACKAGE UFBGA +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7 + +#============================================================ +# ADC +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CONVST +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDI +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SDO +set_location_assignment PIN_U9 -to ADC_CONVST +set_location_assignment PIN_V10 -to ADC_SCK +set_location_assignment PIN_AC4 -to ADC_SDI +set_location_assignment PIN_AD4 -to ADC_SDO + +#============================================================ +# ARDUINO +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to ARDUINO_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to ARDUINO_IO[*] + +#============================================================ +# I2C LEDS/BUTTONS +#============================================================ +set_location_assignment PIN_U14 -to IO_SCL +set_location_assignment PIN_AG9 -to IO_SDA +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to IO_S* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_S* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to IO_S* + +#============================================================ +# USER PORT +#============================================================ +set_location_assignment PIN_AF17 -to USER_IO[6] +set_location_assignment PIN_AF15 -to USER_IO[5] +set_location_assignment PIN_AG16 -to USER_IO[4] +set_location_assignment PIN_AH11 -to USER_IO[3] +set_location_assignment PIN_AH12 -to USER_IO[2] +set_location_assignment PIN_AH9 -to USER_IO[1] +set_location_assignment PIN_AG11 -to USER_IO[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USER_IO[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to USER_IO[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to USER_IO[*] + +#============================================================ +# SDIO_CD or SPDIF_OUT +#============================================================ +set_location_assignment PIN_AH7 -to SDCD_SPDIF +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDCD_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDCD_SPDIF +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDCD_SPDIF + +#============================================================ +# SDRAM +#============================================================ +set_location_assignment PIN_Y11 -to SDRAM_A[0] +set_location_assignment PIN_AA26 -to SDRAM_A[1] +set_location_assignment PIN_AA13 -to SDRAM_A[2] +set_location_assignment PIN_AA11 -to SDRAM_A[3] +set_location_assignment PIN_W11 -to SDRAM_A[4] +set_location_assignment PIN_Y19 -to SDRAM_A[5] +set_location_assignment PIN_AB23 -to SDRAM_A[6] +set_location_assignment PIN_AC23 -to SDRAM_A[7] +set_location_assignment PIN_AC22 -to SDRAM_A[8] +set_location_assignment PIN_C12 -to SDRAM_A[9] +set_location_assignment PIN_AB26 -to SDRAM_A[10] +set_location_assignment PIN_AD17 -to SDRAM_A[11] +set_location_assignment PIN_D12 -to SDRAM_A[12] +set_location_assignment PIN_Y17 -to SDRAM_BA[0] +set_location_assignment PIN_AB25 -to SDRAM_BA[1] +set_location_assignment PIN_E8 -to SDRAM_DQ[0] +set_location_assignment PIN_V12 -to SDRAM_DQ[1] +set_location_assignment PIN_D11 -to SDRAM_DQ[2] +set_location_assignment PIN_W12 -to SDRAM_DQ[3] +set_location_assignment PIN_AH13 -to SDRAM_DQ[4] +set_location_assignment PIN_D8 -to SDRAM_DQ[5] +set_location_assignment PIN_AH14 -to SDRAM_DQ[6] +set_location_assignment PIN_AF7 -to SDRAM_DQ[7] +set_location_assignment PIN_AE24 -to SDRAM_DQ[8] +set_location_assignment PIN_AD23 -to SDRAM_DQ[9] +set_location_assignment PIN_AE6 -to SDRAM_DQ[10] +set_location_assignment PIN_AE23 -to SDRAM_DQ[11] +set_location_assignment PIN_AG14 -to SDRAM_DQ[12] +set_location_assignment PIN_AD5 -to SDRAM_DQ[13] +set_location_assignment PIN_AF4 -to SDRAM_DQ[14] +set_location_assignment PIN_AH3 -to SDRAM_DQ[15] +set_location_assignment PIN_AG13 -to SDRAM_DQML +set_location_assignment PIN_AF13 -to SDRAM_DQMH +set_location_assignment PIN_AD20 -to SDRAM_CLK +set_location_assignment PIN_AG10 -to SDRAM_CKE +set_location_assignment PIN_AA19 -to SDRAM_nWE +set_location_assignment PIN_AA18 -to SDRAM_nCAS +set_location_assignment PIN_Y18 -to SDRAM_nCS +set_location_assignment PIN_W14 -to SDRAM_nRAS + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_* +set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* + +#============================================================ +# SPI SD +#============================================================ +set_location_assignment PIN_AE15 -to SD_SPI_CS +set_location_assignment PIN_AH8 -to SD_SPI_MISO +set_location_assignment PIN_AG8 -to SD_SPI_CLK +set_location_assignment PIN_U13 -to SD_SPI_MOSI +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SD_SPI* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_SPI* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SD_SPI* + + +#============================================================ +# CLOCK +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK1_50 +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK2_50 +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_CLK3_50 +set_location_assignment PIN_V11 -to FPGA_CLK1_50 +set_location_assignment PIN_Y13 -to FPGA_CLK2_50 +set_location_assignment PIN_E11 -to FPGA_CLK3_50 + +#============================================================ +# HDMI +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2C_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_I2S +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_LRCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_MCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_SCLK +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HDMI_TX_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_D[*] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_DE +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_HS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_VS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to HDMI_TX_CLK +set_location_assignment PIN_U10 -to HDMI_I2C_SCL +set_location_assignment PIN_AA4 -to HDMI_I2C_SDA +set_location_assignment PIN_T13 -to HDMI_I2S +set_location_assignment PIN_T11 -to HDMI_LRCLK +set_location_assignment PIN_U11 -to HDMI_MCLK +set_location_assignment PIN_T12 -to HDMI_SCLK +set_location_assignment PIN_AG5 -to HDMI_TX_CLK +set_location_assignment PIN_AD19 -to HDMI_TX_DE +set_location_assignment PIN_AD12 -to HDMI_TX_D[0] +set_location_assignment PIN_AE12 -to HDMI_TX_D[1] +set_location_assignment PIN_W8 -to HDMI_TX_D[2] +set_location_assignment PIN_Y8 -to HDMI_TX_D[3] +set_location_assignment PIN_AD11 -to HDMI_TX_D[4] +set_location_assignment PIN_AD10 -to HDMI_TX_D[5] +set_location_assignment PIN_AE11 -to HDMI_TX_D[6] +set_location_assignment PIN_Y5 -to HDMI_TX_D[7] +set_location_assignment PIN_AF10 -to HDMI_TX_D[8] +set_location_assignment PIN_Y4 -to HDMI_TX_D[9] +set_location_assignment PIN_AE9 -to HDMI_TX_D[10] +set_location_assignment PIN_AB4 -to HDMI_TX_D[11] +set_location_assignment PIN_AE7 -to HDMI_TX_D[12] +set_location_assignment PIN_AF6 -to HDMI_TX_D[13] +set_location_assignment PIN_AF8 -to HDMI_TX_D[14] +set_location_assignment PIN_AF5 -to HDMI_TX_D[15] +set_location_assignment PIN_AE4 -to HDMI_TX_D[16] +set_location_assignment PIN_AH2 -to HDMI_TX_D[17] +set_location_assignment PIN_AH4 -to HDMI_TX_D[18] +set_location_assignment PIN_AH5 -to HDMI_TX_D[19] +set_location_assignment PIN_AH6 -to HDMI_TX_D[20] +set_location_assignment PIN_AG6 -to HDMI_TX_D[21] +set_location_assignment PIN_AF9 -to HDMI_TX_D[22] +set_location_assignment PIN_AE8 -to HDMI_TX_D[23] +set_location_assignment PIN_T8 -to HDMI_TX_HS +set_location_assignment PIN_AF11 -to HDMI_TX_INT +set_location_assignment PIN_V13 -to HDMI_TX_VS + +#============================================================ +# KEY +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1] +set_location_assignment PIN_AH17 -to KEY[0] +set_location_assignment PIN_AH16 -to KEY[1] + +#============================================================ +# LED +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED[7] +set_location_assignment PIN_W15 -to LED[0] +set_location_assignment PIN_AA24 -to LED[1] +set_location_assignment PIN_V16 -to LED[2] +set_location_assignment PIN_V15 -to LED[3] +set_location_assignment PIN_AF26 -to LED[4] +set_location_assignment PIN_AE26 -to LED[5] +set_location_assignment PIN_Y16 -to LED[6] +set_location_assignment PIN_AA23 -to LED[7] + +#============================================================ +# SW +#============================================================ +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3] +set_location_assignment PIN_Y24 -to SW[0] +set_location_assignment PIN_W24 -to SW[1] +set_location_assignment PIN_W21 -to SW[2] +set_location_assignment PIN_W20 -to SW[3] + +set_instance_assignment -name HPS_LOCATION HPSINTERFACEPERIPHERALSPIMASTER_X52_Y72_N111 -entity sys_top -to spi +set_instance_assignment -name HPS_LOCATION HPSINTERFACEPERIPHERALUART_X52_Y67_N111 -entity sys_top -to uart +set_instance_assignment -name HPS_LOCATION HPSINTERFACEPERIPHERALI2C_X52_Y60_N111 -entity sys_top -to hdmi_i2c + +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:sys/build_id.tcl" + +set_global_assignment -name CDF_FILE jtag.cdf +set_global_assignment -name QIP_FILE sys/sys.qip + diff --git a/sys/sys_analog.tcl b/sys/sys_analog.tcl new file mode 100644 index 0000000..7ffb3ec --- /dev/null +++ b/sys/sys_analog.tcl @@ -0,0 +1,71 @@ +#============================================================ +# SDIO +#============================================================ +set_location_assignment PIN_AF25 -to SDIO_DAT[0] +set_location_assignment PIN_AF23 -to SDIO_DAT[1] +set_location_assignment PIN_AD26 -to SDIO_DAT[2] +set_location_assignment PIN_AF28 -to SDIO_DAT[3] +set_location_assignment PIN_AF27 -to SDIO_CMD +set_location_assignment PIN_AH26 -to SDIO_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDIO_* + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDIO_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_DAT[*] +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SDIO_CMD + +#============================================================ +# VGA +#============================================================ +set_location_assignment PIN_AE17 -to VGA_R[0] +set_location_assignment PIN_AE20 -to VGA_R[1] +set_location_assignment PIN_AF20 -to VGA_R[2] +set_location_assignment PIN_AH18 -to VGA_R[3] +set_location_assignment PIN_AH19 -to VGA_R[4] +set_location_assignment PIN_AF21 -to VGA_R[5] + +set_location_assignment PIN_AE19 -to VGA_G[0] +set_location_assignment PIN_AG15 -to VGA_G[1] +set_location_assignment PIN_AF18 -to VGA_G[2] +set_location_assignment PIN_AG18 -to VGA_G[3] +set_location_assignment PIN_AG19 -to VGA_G[4] +set_location_assignment PIN_AG20 -to VGA_G[5] + +set_location_assignment PIN_AG21 -to VGA_B[0] +set_location_assignment PIN_AA20 -to VGA_B[1] +set_location_assignment PIN_AE22 -to VGA_B[2] +set_location_assignment PIN_AF22 -to VGA_B[3] +set_location_assignment PIN_AH23 -to VGA_B[4] +set_location_assignment PIN_AH21 -to VGA_B[5] + +set_location_assignment PIN_AH22 -to VGA_HS +set_location_assignment PIN_AG24 -to VGA_VS + +set_location_assignment PIN_AH27 -to VGA_EN +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to VGA_EN + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_* + +#============================================================ +# AUDIO +#============================================================ +set_location_assignment PIN_AC24 -to AUDIO_L +set_location_assignment PIN_AE25 -to AUDIO_R +set_location_assignment PIN_AG26 -to AUDIO_SPDIF +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_* +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_* + +#============================================================ +# I/O #1 +#============================================================ +set_location_assignment PIN_Y15 -to LED_USER +set_location_assignment PIN_AA15 -to LED_HDD +set_location_assignment PIN_AG28 -to LED_POWER + +set_location_assignment PIN_AH24 -to BTN_USER +set_location_assignment PIN_AG25 -to BTN_OSD +set_location_assignment PIN_AG23 -to BTN_RESET + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED_* +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BTN_* +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to BTN_* diff --git a/sys/sys_dual_sdram.tcl b/sys/sys_dual_sdram.tcl new file mode 100644 index 0000000..06124e7 --- /dev/null +++ b/sys/sys_dual_sdram.tcl @@ -0,0 +1,50 @@ +#============================================================ +# Secondary SDRAM +#============================================================ +set_location_assignment PIN_Y15 -to SDRAM2_DQ[0] +set_location_assignment PIN_AC24 -to SDRAM2_DQ[1] +set_location_assignment PIN_AA15 -to SDRAM2_DQ[2] +set_location_assignment PIN_AD26 -to SDRAM2_DQ[3] +set_location_assignment PIN_AG28 -to SDRAM2_DQ[4] +set_location_assignment PIN_AF28 -to SDRAM2_DQ[5] +set_location_assignment PIN_AE25 -to SDRAM2_DQ[6] +set_location_assignment PIN_AF27 -to SDRAM2_DQ[7] +set_location_assignment PIN_AG26 -to SDRAM2_DQ[14] +set_location_assignment PIN_AH27 -to SDRAM2_DQ[15] + +set_location_assignment PIN_AG25 -to SDRAM2_DQ[13] +set_location_assignment PIN_AH26 -to SDRAM2_DQ[12] +set_location_assignment PIN_AH24 -to SDRAM2_DQ[11] +set_location_assignment PIN_AF25 -to SDRAM2_DQ[10] +set_location_assignment PIN_AG23 -to SDRAM2_DQ[9] +set_location_assignment PIN_AF23 -to SDRAM2_DQ[8] +set_location_assignment PIN_AG24 -to SDRAM2_A[12] +set_location_assignment PIN_AH22 -to SDRAM2_CLK +set_location_assignment PIN_AH21 -to SDRAM2_A[9] +set_location_assignment PIN_AG21 -to SDRAM2_A[11] +set_location_assignment PIN_AH23 -to SDRAM2_A[7] +set_location_assignment PIN_AA20 -to SDRAM2_A[8] +set_location_assignment PIN_AF22 -to SDRAM2_A[5] +set_location_assignment PIN_AE22 -to SDRAM2_A[6] +set_location_assignment PIN_AG20 -to SDRAM2_nWE +set_location_assignment PIN_AF21 -to SDRAM2_A[4] + +set_location_assignment PIN_AG19 -to SDRAM2_nCAS +set_location_assignment PIN_AH19 -to SDRAM2_nRAS +set_location_assignment PIN_AG18 -to SDRAM2_nCS +set_location_assignment PIN_AH18 -to SDRAM2_BA[0] +set_location_assignment PIN_AF18 -to SDRAM2_BA[1] +set_location_assignment PIN_AF20 -to SDRAM2_A[10] +set_location_assignment PIN_AG15 -to SDRAM2_A[0] +set_location_assignment PIN_AE20 -to SDRAM2_A[1] +set_location_assignment PIN_AE19 -to SDRAM2_A[2] +set_location_assignment PIN_AE17 -to SDRAM2_A[3] + +set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM2_* +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM2_* +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_* +set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM2_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM2_DQ[*] +set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM2_* + +set_global_assignment -name VERILOG_MACRO "DUAL_SDRAM=1" diff --git a/sys/sys_top.sdc b/sys/sys_top.sdc index f8f6de6..e7846f5 100644 --- a/sys/sys_top.sdc +++ b/sys/sys_top.sdc @@ -1,53 +1,71 @@ # Specify root clocks -create_clock -period "50.0 MHz" [get_ports FPGA_CLK1_50] -create_clock -period "50.0 MHz" [get_ports FPGA_CLK2_50] -create_clock -period "50.0 MHz" [get_ports FPGA_CLK3_50] +create_clock -period "50.0 MHz" [get_ports FPGA_CLK1_50] +create_clock -period "50.0 MHz" [get_ports FPGA_CLK2_50] +create_clock -period "50.0 MHz" [get_ports FPGA_CLK3_50] create_clock -period "100.0 MHz" [get_pins -compatibility_mode *|h2f_user0_clk] +create_clock -period "100.0 MHz" [get_pins -compatibility_mode spi|sclk_out] -name spi_sck +create_clock -period "10.0 MHz" [get_pins -compatibility_mode hdmi_i2c|out_clk] -name hdmi_sck derive_pll_clocks - -# Specify PLL-generated clock(s) -#create_generated_clock -source [get_pins -compatibility_mode {*|pll|pll_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk}] \ -# -name SDRAM_CLK [get_ports {SDRAM_CLK}] - -#create_generated_clock -source [get_pins -compatibility_mode {pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk}] \ -# -name HDMI_CLK [get_ports HDMI_TX_CLK] - -#create_generated_clock -source [get_pins { pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk}] \ -# -name VID_CLK -divide_by 2 -duty_cycle 50 [get_nets {vip|output_inst|vid_clk}] - - derive_clock_uncertainty - -# Set acceptable delays for SDRAM chip (See correspondent chip datasheet) -#set_input_delay -max -clock SDRAM_CLK 6.4ns [get_ports SDRAM_DQ[*]] -#set_input_delay -min -clock SDRAM_CLK 3.7ns [get_ports SDRAM_DQ[*]] - -#set_multicycle_path -from [get_clocks {SDRAM_CLK}] \ -# -to [get_clocks {*|pll|pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] \ -# -setup 2 - -#set_output_delay -max -clock SDRAM_CLK 1.6ns [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] -#set_output_delay -min -clock SDRAM_CLK -0.9ns [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] - # Decouple different clock groups (to simplify routing) -# -group [get_clocks { *|pll|pll_inst|altera_pll_i|general[*].gpll~PLL_OUTPUT_COUNTER|divclk}] \ -# -group [get_clocks { pll_hdmi|pll_hdmi_inst|altera_pll_i|cyclonev_pll|counter[0].output_counter|divclk VID_CLK}] \ -set_clock_groups -asynchronous \ +set_clock_groups -exclusive \ + -group [get_clocks { *|pll|pll_inst|altera_pll_i|*[*].*|divclk}] \ + -group [get_clocks { pll_hdmi|pll_hdmi_inst|altera_pll_i|*[0].*|divclk}] \ + -group [get_clocks { pll_audio|pll_audio_inst|altera_pll_i|*[0].*|divclk}] \ + -group [get_clocks { spi_sck}] \ + -group [get_clocks { hdmi_sck}] \ -group [get_clocks { *|h2f_user0_clk}] \ - -group [get_clocks { FPGA_CLK1_50 FPGA_CLK2_50 FPGA_CLK3_50}] + -group [get_clocks { FPGA_CLK1_50 }] \ + -group [get_clocks { FPGA_CLK2_50 }] \ + -group [get_clocks { FPGA_CLK3_50 }] -#set_output_delay -max -clock HDMI_CLK 2.0ns [get_ports {HDMI_TX_D[*] HDMI_TX_DE HDMI_TX_HS HDMI_TX_VS}] -#set_output_delay -min -clock HDMI_CLK -1.5ns [get_ports {HDMI_TX_D[*] HDMI_TX_DE HDMI_TX_HS HDMI_TX_VS}] +set_false_path -from [get_ports {KEY*}] +set_false_path -from [get_ports {BTN_*}] +set_false_path -to [get_ports {LED_*}] +set_false_path -to [get_ports {VGA_*}] +set_false_path -to [get_ports {AUDIO_SPDIF}] +set_false_path -to [get_ports {AUDIO_L}] +set_false_path -to [get_ports {AUDIO_R}] +set_false_path -to {cfg[*]} +set_false_path -from {cfg[*]} +set_false_path -from {VSET[*]} +set_false_path -to {wcalc[*] hcalc[*]} +set_false_path -to {hdmi_width[*] hdmi_height[*]} -# Put constraints on input ports -set_false_path -from [get_ports {KEY*}] -to * -set_false_path -from [get_ports {BTN_*}] -to * +set_multicycle_path -to {*_osd|osd_vcnt*} -setup 2 +set_multicycle_path -to {*_osd|osd_vcnt*} -hold 1 -# Put constraints on output ports -set_false_path -from * -to [get_ports {LED_*}] -set_false_path -from * -to [get_ports {VGA_*}] -set_false_path -from * -to [get_ports {AUDIO_SPDIF}] -set_false_path -from * -to [get_ports {AUDIO_L}] -set_false_path -from * -to [get_ports {AUDIO_R}] +set_false_path -to {*_osd|v_cnt*} +set_false_path -to {*_osd|v_osd_start*} +set_false_path -to {*_osd|v_info_start*} +set_false_path -to {*_osd|h_osd_start*} +set_false_path -from {*_osd|v_osd_start*} +set_false_path -from {*_osd|v_info_start*} +set_false_path -from {*_osd|h_osd_start*} +set_false_path -from {*_osd|rot*} +set_false_path -from {*_osd|dsp_width*} +set_false_path -to {*_osd|half} + +set_false_path -to {WIDTH[*] HFP[*] HS[*] HBP[*] HEIGHT[*] VFP[*] VS[*] VBP[*]} +set_false_path -from {WIDTH[*] HFP[*] HS[*] HBP[*] HEIGHT[*] VFP[*] VS[*] VBP[*]} +set_false_path -to {FB_BASE[*] FB_BASE[*] FB_WIDTH[*] FB_HEIGHT[*] LFB_HMIN[*] LFB_HMAX[*] LFB_VMIN[*] LFB_VMAX[*]} +set_false_path -from {FB_BASE[*] FB_BASE[*] FB_WIDTH[*] FB_HEIGHT[*] LFB_HMIN[*] LFB_HMAX[*] LFB_VMIN[*] LFB_VMAX[*]} +set_false_path -to {vol_att[*] scaler_flt[*] led_overtake[*] led_state[*]} +set_false_path -from {vol_att[*] scaler_flt[*] led_overtake[*] led_state[*]} +set_false_path -from {aflt_* acx* acy* areset* arc*} +set_false_path -from {vs_line*} + +set_false_path -from {ascal|o_ihsize*} +set_false_path -from {ascal|o_ivsize*} +set_false_path -from {ascal|o_format*} +set_false_path -from {ascal|o_hdown} +set_false_path -from {ascal|o_vdown} +set_false_path -from {ascal|o_hmin* ascal|o_hmax* ascal|o_vmin* ascal|o_vmax*} +set_false_path -from {ascal|o_hdisp* ascal|o_vdisp*} +set_false_path -from {ascal|o_htotal* ascal|o_vtotal*} +set_false_path -from {ascal|o_hsstart* ascal|o_vsstart* ascal|o_hsend* ascal|o_vsend*} +set_false_path -from {ascal|o_hsize* ascal|o_vsize*} + +set_false_path -from {mcp23009|sd_cd} diff --git a/sys/sys_top.v b/sys/sys_top.v index 9818319..31f2ce4 100644 --- a/sys/sys_top.v +++ b/sys/sys_top.v @@ -1,7 +1,7 @@ //============================================================================ // // MiSTer hardware abstraction module -// (c)2017,2018 Sorgelig +// (c)2017-2020 Alexey Melnikov // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free @@ -21,90 +21,133 @@ module sys_top ( - /////////// CLOCK ////////// - input FPGA_CLK1_50, - input FPGA_CLK2_50, - input FPGA_CLK3_50, + /////////// CLOCK ////////// + input FPGA_CLK1_50, + input FPGA_CLK2_50, + input FPGA_CLK3_50, - //////////// VGA /////////// - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - inout VGA_HS, // VGA_HS is secondary SD card detect when VGA_EN = 1 (inactive) - output VGA_VS, - input VGA_EN, // active low + //////////// HDMI ////////// + output HDMI_I2C_SCL, + inout HDMI_I2C_SDA, - /////////// AUDIO ////////// - output AUDIO_L, - output AUDIO_R, - output AUDIO_SPDIF, + output HDMI_MCLK, + output HDMI_SCLK, + output HDMI_LRCLK, + output HDMI_I2S, - //////////// HDMI ////////// -`ifndef LITE - output HDMI_I2C_SCL, - inout HDMI_I2C_SDA, + output HDMI_TX_CLK, + output HDMI_TX_DE, + output [23:0] HDMI_TX_D, + output HDMI_TX_HS, + output HDMI_TX_VS, + + input HDMI_TX_INT, - output HDMI_MCLK, - output HDMI_SCLK, - output HDMI_LRCLK, - output HDMI_I2S, + //////////// SDR /////////// + output [12:0] SDRAM_A, + inout [15:0] SDRAM_DQ, + output SDRAM_DQML, + output SDRAM_DQMH, + output SDRAM_nWE, + output SDRAM_nCAS, + output SDRAM_nRAS, + output SDRAM_nCS, + output [1:0] SDRAM_BA, + output SDRAM_CLK, + output SDRAM_CKE, - output HDMI_TX_CLK, - output HDMI_TX_DE, - output [23:0] HDMI_TX_D, - output HDMI_TX_HS, - output HDMI_TX_VS, - - input HDMI_TX_INT, -`endif +`ifdef MISTER_DUAL_SDRAM + ////////// SDR #2 ////////// + output [12:0] SDRAM2_A, + inout [15:0] SDRAM2_DQ, + output SDRAM2_nWE, + output SDRAM2_nCAS, + output SDRAM2_nRAS, + output SDRAM2_nCS, + output [1:0] SDRAM2_BA, + output SDRAM2_CLK, - //////////// SDR /////////// -`ifndef LITE - output [12:0] SDRAM_A, - inout [15:0] SDRAM_DQ, - output SDRAM_DQML, - output SDRAM_DQMH, - output SDRAM_nWE, - output SDRAM_nCAS, - output SDRAM_nRAS, - output SDRAM_nCS, - output [1:0] SDRAM_BA, - output SDRAM_CLK, - output SDRAM_CKE, `else - input UART_RX, - output UART_TX, + //////////// VGA /////////// + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + inout VGA_HS, // VGA_HS is secondary SD card detect when VGA_EN = 1 (inactive) + output VGA_VS, + input VGA_EN, // active low + + /////////// AUDIO ////////// + output AUDIO_L, + output AUDIO_R, + output AUDIO_SPDIF, + + //////////// SDIO /////////// + inout [3:0] SDIO_DAT, + inout SDIO_CMD, + output SDIO_CLK, + + //////////// I/O /////////// + output LED_USER, + output LED_HDD, + output LED_POWER, + input BTN_USER, + input BTN_OSD, + input BTN_RESET, `endif - //////////// I/O /////////// - output LED_USER, - output LED_HDD, - output LED_POWER, - input BTN_USER, - input BTN_OSD, - input BTN_RESET, + ////////// I/O ALT ///////// + output SD_SPI_CS, + input SD_SPI_MISO, + output SD_SPI_CLK, + output SD_SPI_MOSI, - //////////// SDIO /////////// - inout [3:0] SDIO_DAT, - inout SDIO_CMD, - output SDIO_CLK, - input SDIO_CD, + inout SDCD_SPDIF, + output IO_SCL, + inout IO_SDA, - ////////// MB KEY /////////// - input [1:0] KEY, + ////////// ADC ////////////// + output ADC_SCK, + input ADC_SDO, + output ADC_SDI, + output ADC_CONVST, - ////////// MB SWITCH //////// - input [3:0] SW, + ////////// MB KEY /////////// + input [1:0] KEY, - ////////// MB LED /////////// - output [7:0] LED + ////////// MB SWITCH //////// + input [3:0] SW, + + ////////// MB LED /////////// + output [7:0] LED, + + ///////// USER IO /////////// + inout [6:0] USER_IO ); +////////////////////// Secondary SD /////////////////////////////////// +wire SD_CS, SD_CLK, SD_MOSI; -assign SDIO_DAT[2:1] = 2'bZZ; +`ifndef MISTER_DUAL_SDRAM + wire sd_miso = SW[3] | SDIO_DAT[0]; +`else + wire sd_miso = 1; +`endif +wire SD_MISO = mcp_sdcd ? sd_miso : SD_SPI_MISO; +`ifndef MISTER_DUAL_SDRAM + assign SDIO_DAT[2:1]= 2'bZZ; + assign SDIO_DAT[3] = SW[3] ? 1'bZ : SD_CS; + assign SDIO_CLK = SW[3] ? 1'bZ : SD_CLK; + assign SDIO_CMD = SW[3] ? 1'bZ : SD_MOSI; + assign SD_SPI_CS = mcp_sdcd ? ((~VGA_EN & sog & ~cs1) ? 1'b1 : 1'bZ) : SD_CS; +`else + assign SD_SPI_CS = mcp_sdcd ? 1'bZ : SD_CS; +`endif -////////////////////////// LEDs /////////////////////////////////////// +assign SD_SPI_CLK = mcp_sdcd ? 1'bZ : SD_CLK; +assign SD_SPI_MOSI = mcp_sdcd ? 1'bZ : SD_MOSI; + +////////////////////// LEDs/Buttons /////////////////////////////////// reg [7:0] led_overtake = 0; reg [7:0] led_state = 0; @@ -112,76 +155,99 @@ reg [7:0] led_state = 0; wire led_p = led_power[1] ? ~led_power[0] : 1'b0; wire led_d = led_disk[1] ? ~led_disk[0] : ~(led_disk[0] | gp_out[29]); wire led_u = ~led_user; -wire [7:0] led_mb; +wire led_locked; -assign LED = led_mb; -assign LED_POWER = led_p ? 1'bZ : 1'b0; -assign LED_HDD = led_d ? 1'bZ : 1'b0; -assign LED_USER = led_u ? 1'bZ : 1'b0; +`ifndef MISTER_DUAL_SDRAM + assign LED_POWER = (SW[3] | led_p) ? 1'bZ : 1'b0; + assign LED_HDD = (SW[3] | led_d) ? 1'bZ : 1'b0; + assign LED_USER = (SW[3] | led_u) ? 1'bZ : 1'b0; +`endif //LEDs on main board -//assign LED = (led_overtake & led_state) | (~led_overtake & {3'b000, ~led_p, 1'b0, ~led_d, 1'b0, ~led_u}); +assign LED = (led_overtake & led_state) | (~led_overtake & {1'b0,led_locked,1'b0, ~led_p, 1'b0, ~led_d, 1'b0, ~led_u}); + +wire btn_r, btn_o, btn_u; +`ifdef MISTER_DUAL_SDRAM + assign {btn_r,btn_o,btn_u} = {mcp_btn[1],mcp_btn[2],mcp_btn[0]}; +`else + assign {btn_r,btn_o,btn_u} = ~{BTN_RESET,BTN_OSD,BTN_USER} | {mcp_btn[1],mcp_btn[2],mcp_btn[0]}; +`endif + +wire [2:0] mcp_btn; +wire mcp_sdcd; +mcp23009 mcp23009 +( + .clk(FPGA_CLK2_50), + + .btn(mcp_btn), + .led({led_p, led_d, led_u}), + .sd_cd(mcp_sdcd), + + .scl(IO_SCL), + .sda(IO_SDA) +); -////////////////////////// Buttons /////////////////////////////////// reg btn_user, btn_osd; always @(posedge FPGA_CLK2_50) begin - integer div; - reg [7:0] deb_user; - reg [7:0] deb_osd; + integer div; + reg [7:0] deb_user; + reg [7:0] deb_osd; - div <= div + 1'b1; - if(div > 100000) div <= 0; - - if(!div) begin - deb_user <= {deb_user[6:0], ~(BTN_USER & KEY[1])}; - if(&deb_user) btn_user <= 1; - if(!deb_user) btn_user <= 0; + div <= div + 1'b1; + if(div > 100000) div <= 0; - deb_osd <= {deb_osd[6:0], ~(BTN_OSD & KEY[0])}; - if(&deb_osd) btn_osd <= 1; - if(!deb_osd) btn_osd <= 0; - end + if(!div) begin + deb_user <= {deb_user[6:0], btn_u | ~KEY[1]}; + if(&deb_user) btn_user <= 1; + if(!deb_user) btn_user <= 0; + + deb_osd <= {deb_osd[6:0], btn_o | ~KEY[0]}; + if(&deb_osd) btn_osd <= 1; + if(!deb_osd) btn_osd <= 0; + end end -reg btn_reset = 1; -always @(posedge FPGA_CLK2_50) btn_reset <= BTN_RESET; - - ///////////////////////// HPS I/O ///////////////////////////////////// // gp_in[31] = 0 - quick flag that FPGA is initialized (HPS reads 1 when FPGA is not in user mode) // used to avoid lockups while JTAG loading -wire [31:0] gp_in = {1'b0, btn_user, btn_osd, 9'd0, io_ver, io_ack, io_wide, io_dout}; +wire [31:0] gp_in = {1'b0, btn_user | btn[1], btn_osd | btn[0], SW[3], 8'd0, io_ver, io_ack, io_wide, io_dout}; wire [31:0] gp_out; -wire [1:0] io_ver = 1; // 0 - standard MiST I/O (for quick porting of complex MiST cores). 1 - optimized HPS I/O. 2,3 - reserved for future. +wire [1:0] io_ver = 1; // 0 - obsolete. 1 - optimized HPS I/O. 2,3 - reserved for future. wire io_wait; wire io_wide; wire [15:0] io_dout; -wire [15:0] io_din = gp_outr[15:0]; -wire io_clk = gp_outr[17]; -wire io_fpga = gp_outr[18]; -wire io_osd = gp_outr[19]; -wire io_uio = gp_outr[20]; -//wire io_sdd = gp_outr[21]; // used only in ST core +wire [15:0] io_din = gp_outr[15:0]; +wire io_clk = gp_outr[17]; +wire io_ss0 = gp_outr[18]; +wire io_ss1 = gp_outr[19]; +wire io_ss2 = gp_outr[20]; + +`ifndef MISTER_DEBUG_NOHDMI +wire io_osd_hdmi = io_ss1 & ~io_ss0; +`endif + +wire io_fpga = ~io_ss1 & io_ss0; +wire io_uio = ~io_ss1 & io_ss2; reg io_ack; reg rack; wire io_strobe = ~rack & io_clk; always @(posedge clk_sys) begin - if(~io_wait | io_strobe) begin - rack <= io_clk; - io_ack <= rack; - end + if(~(io_wait | vs_wait) | io_strobe) begin + rack <= io_clk; + io_ack <= rack; + end end reg [31:0] gp_outr; always @(posedge clk_sys) begin - reg [31:0] gp_outd; - gp_outr <= gp_outd; - gp_outd <= gp_out; + reg [31:0] gp_outd; + gp_outr <= gp_outd; + gp_outd <= gp_out; end wire [7:0] core_type = 'hA7; // A7 - Sharp MZ series core. @@ -191,349 +257,352 @@ wire [31:0] core_magic = {24'h5CA623, core_type}; cyclonev_hps_interface_mpu_general_purpose h2f_gp ( - .gp_in({~gp_out[31] ? core_magic : gp_in}), - .gp_out(gp_out) + .gp_in({~gp_out[31] ? core_magic : gp_in}), + .gp_out(gp_out) ); reg [15:0] cfg; -reg cfg_got = 0; -reg cfg_set = 0; -//wire [2:0] hdmi_res = cfg[10:8]; -wire dvi_mode = cfg[7]; -wire audio_96k = cfg[6]; -wire ypbpr_en = cfg[5]; -wire csync = cfg[3]; +reg cfg_set = 0; +wire vga_fb = cfg[12] | vga_force_scaler; +wire [1:0] hdmi_limited = {cfg[11],cfg[8]}; -wire vga_scaler= cfg[2]; +`ifdef MISTER_DEBUG_NOHDMI +wire direct_video = 1; +`else +wire direct_video = cfg[10]; +`endif + +wire dvi_mode = cfg[7]; +wire audio_96k = cfg[6]; +wire csync_en = cfg[3]; +wire ypbpr_en = cfg[5]; +wire io_osd_vga = io_ss1 & ~io_ss2; +`ifndef MISTER_DUAL_SDRAM + wire sog = cfg[9]; + wire vga_scaler = cfg[2] | vga_force_scaler; +`endif reg cfg_custom_t = 0; reg [5:0] cfg_custom_p1; reg [31:0] cfg_custom_p2; -reg [4:0] vol_att = 0; +reg [4:0] vol_att; +initial vol_att = 5'b11111; + +reg [6:0] coef_addr; +reg [8:0] coef_data; +reg coef_wr = 0; + +wire[12:0] ARX, ARY; +reg [11:0] VSET = 0, HSET = 0; +reg FREESCALE = 0; +reg [2:0] scaler_flt; +reg lowlat = 0; +reg cfg_dis = 0; + +reg vs_wait = 0; +reg [11:0] vs_line = 0; + +reg scaler_out = 0; + +reg [31:0] aflt_rate = 7056000; +reg [39:0] acx = 4258969; +reg [7:0] acx0 = 3; +reg [7:0] acx1 = 3; +reg [7:0] acx2 = 1; +reg [23:0] acy0 = -24'd6216759; +reg [23:0] acy1 = 24'd6143386; +reg [23:0] acy2 = -24'd2023767; +reg areset = 0; +reg [12:0] arc1x = 0; +reg [12:0] arc1y = 0; +reg [12:0] arc2x = 0; +reg [12:0] arc2y = 0; -reg vip_newcfg = 0; always@(posedge clk_sys) begin - reg [7:0] cmd; - reg has_cmd; - reg old_strobe; - reg [7:0] cnt = 0; + reg [7:0] cmd; + reg has_cmd; + reg old_strobe; + reg [7:0] cnt = 0; + reg vs_d0,vs_d1,vs_d2; + reg [4:0] acx_att; - old_strobe <= io_strobe; + old_strobe <= io_strobe; + coef_wr <= 0; - if(~io_uio) has_cmd <= 0; - else - if(~old_strobe & io_strobe) begin - if(!has_cmd) begin - has_cmd <= 1; - cmd <= io_din[7:0]; - cnt <= 0; - end - else begin - if(cmd == 1) begin - cfg <= io_din; - cfg_set <= 1; - end - if(cmd == 'h20) begin - cfg_set <= 0; - cnt <= cnt + 1'd1; - if(cnt<8) begin - if(!cnt) vip_newcfg <= ~cfg_ready; - case(cnt) - 0: if(WIDTH != io_din[11:0]) begin WIDTH <= io_din[11:0]; vip_newcfg <= 1; end - 1: if(HFP != io_din[11:0]) begin HFP <= io_din[11:0]; vip_newcfg <= 1; end - 2: if(HS != io_din[11:0]) begin HS <= io_din[11:0]; vip_newcfg <= 1; end - 3: if(HBP != io_din[11:0]) begin HBP <= io_din[11:0]; vip_newcfg <= 1; end - 4: if(HEIGHT != io_din[11:0]) begin HEIGHT <= io_din[11:0]; vip_newcfg <= 1; end - 5: if(VFP != io_din[11:0]) begin VFP <= io_din[11:0]; vip_newcfg <= 1; end - 6: if(VS != io_din[11:0]) begin VS <= io_din[11:0]; vip_newcfg <= 1; end - 7: if(VBP != io_din[11:0]) begin VBP <= io_din[11:0]; vip_newcfg <= 1; end - endcase - if(cnt == 1) begin - cfg_custom_p1 <= 0; - cfg_custom_p2 <= 0; - cfg_custom_t <= ~cfg_custom_t; - end - end - else begin - if(cnt[1:0]==0) cfg_custom_p1 <= io_din[5:0]; - if(cnt[1:0]==1) cfg_custom_p2[15:0] <= io_din; - if(cnt[1:0]==2) begin - cfg_custom_p2[31:16] <= io_din; - cfg_custom_t <= ~cfg_custom_t; - cnt[1:0] <= 0; - end - end - end - if(cmd == 'h25) {led_overtake, led_state} <= io_din; - if(cmd == 'h26) vol_att <= io_din[4:0]; - if(cmd == 'h27) VSET <= io_din[11:0]; - end - end -end - -`ifndef LITE -always @(posedge clk_sys) begin - reg vsd, vsd2; - if(~cfg_ready || ~cfg_set) cfg_got <= cfg_set; - else begin - vsd <= HDMI_TX_VS; - vsd2 <= vsd; - if(~vsd2 & vsd) cfg_got <= cfg_set; - end -end + if(~io_uio) begin + has_cmd <= 0; + cmd <= 0; + areset <= 0; + acx_att <= 0; + acx <= acx >> acx_att; + end + else + if(~old_strobe & io_strobe) begin + if(!has_cmd) begin + has_cmd <= 1; + cmd <= io_din[7:0]; + cnt <= 0; + if(io_din[7:0] == 'h30) vs_wait <= 1; + if(io_din[7:0] == 'h39) begin + aflt_rate <= 7056000; + acx <= 4258969; + acx0 <= 3; + acx1 <= 3; + acx2 <= 1; + acy0 <= -24'd6216759; + acy1 <= 24'd6143386; + acy2 <= -24'd2023767; + areset <= 1; + end + end + else begin + if(cmd == 1) begin + cfg <= io_din; + cfg_set <= 1; + scaler_out <= 1; + end + if(cmd == 'h20) begin + cfg_set <= 0; + cnt <= cnt + 1'd1; + if(cnt<8) begin + case(cnt[2:0]) + 0: if(WIDTH != io_din[11:0]) WIDTH <= io_din[11:0]; + 1: if(HFP != io_din[11:0]) HFP <= io_din[11:0]; + 2: if(HS != io_din[11:0]) HS <= io_din[11:0]; + 3: if(HBP != io_din[11:0]) HBP <= io_din[11:0]; + 4: if(HEIGHT != io_din[11:0]) HEIGHT <= io_din[11:0]; + 5: if(VFP != io_din[11:0]) VFP <= io_din[11:0]; + 6: if(VS != io_din[11:0]) VS <= io_din[11:0]; + 7: if(VBP != io_din[11:0]) VBP <= io_din[11:0]; + endcase +`ifndef MISTER_DEBUG_NOHDMI + if(cnt == 1) begin + cfg_custom_p1 <= 0; + cfg_custom_p2 <= 0; + cfg_custom_t <= ~cfg_custom_t; + end + end + else begin + if(cnt[1:0]==0) cfg_custom_p1 <= io_din[5:0]; + if(cnt[1:0]==1) cfg_custom_p2[15:0] <= io_din; + if(cnt[1:0]==2) begin + cfg_custom_p2[31:16] <= io_din; + cfg_custom_t <= ~cfg_custom_t; + cnt[2:0] <= 3'b100; + end + if(cnt == 8) {lowlat,cfg_dis} <= io_din[15:14]; `endif + end + end + if(cmd == 'h2F) begin + cnt <= cnt + 1'd1; + case(cnt[3:0]) + 0: {LFB_EN,LFB_FLT,LFB_FMT} <= {io_din[15], io_din[14], io_din[5:0]}; + 1: LFB_BASE[15:0] <= io_din[15:0]; + 2: LFB_BASE[31:16] <= io_din[15:0]; + 3: LFB_WIDTH <= io_din[11:0]; + 4: LFB_HEIGHT <= io_din[11:0]; + 5: LFB_HMIN <= io_din[11:0]; + 6: LFB_HMAX <= io_din[11:0]; + 7: LFB_VMIN <= io_din[11:0]; + 8: LFB_VMAX <= io_din[11:0]; + 9: LFB_STRIDE <= io_din[13:0]; + endcase + end + if(cmd == 'h25) {led_overtake, led_state} <= io_din; + if(cmd == 'h26) vol_att <= io_din[4:0]; + if(cmd == 'h27) VSET <= io_din[11:0]; + if(cmd == 'h2A) {coef_wr,coef_addr,coef_data} <= {1'b1,io_din}; + if(cmd == 'h2B) scaler_flt <= io_din[2:0]; + if(cmd == 'h37) {FREESCALE,HSET} <= {io_din[15],io_din[11:0]}; + if(cmd == 'h38) vs_line <= io_din[11:0]; + if(cmd == 'h39) begin + cnt <= cnt + 1'd1; + case(cnt[3:0]) + 0: acx_att <= io_din[4:0]; + 1: aflt_rate[15:0] <= io_din; + 2: aflt_rate[31:16] <= io_din; + 3: acx[15:0] <= io_din; + 4: acx[31:16] <= io_din; + 5: acx[39:32] <= io_din[7:0]; + 6: acx0 <= io_din[7:0]; + 7: acx1 <= io_din[7:0]; + 8: acx2 <= io_din[7:0]; + 9: acy0[15:0] <= io_din; + 10: acy0[23:16] <= io_din[7:0]; + 11: acy1[15:0] <= io_din; + 12: acy1[23:16] <= io_din[7:0]; + 13: acy2[15:0] <= io_din; + 14: acy2[23:16] <= io_din[7:0]; + endcase + end + if(cmd == 'h3A) begin + cnt <= cnt + 1'd1; + case(cnt[3:0]) + 0: arc1x <= io_din[12:0]; + 1: arc1y <= io_din[12:0]; + 2: arc2x <= io_din[12:0]; + 3: arc2y <= io_din[12:0]; + endcase + end + end + end + + vs_d0 <= HDMI_TX_VS; + if(vs_d0 == HDMI_TX_VS) vs_d1 <= vs_d0; + + vs_d2 <= vs_d1; + if(~vs_d2 & vs_d1) vs_wait <= 0; +end + +cyclonev_hps_interface_peripheral_uart uart +( + .ri(0), + .dsr(uart_dsr), + .dcd(uart_dsr), + .dtr(uart_dtr), + + .cts(uart_cts), + .rts(uart_rts), + .rxd(uart_rxd), + .txd(uart_txd) +); + +wire aspi_sck,aspi_mosi,aspi_ss,aspi_miso; +cyclonev_hps_interface_peripheral_spi_master spi +( + .sclk_out(aspi_sck), + .txd(aspi_mosi), // mosi + .rxd(aspi_miso), // miso + + .ss_0_n(aspi_ss), + .ss_in_n(1) +); + +wire [63:0] f2h_irq = {video_sync,HDMI_TX_VS}; +cyclonev_hps_interface_interrupts interrupts +( + .irq(f2h_irq) +); /////////////////////////// RESET /////////////////////////////////// reg reset_req = 0; always @(posedge FPGA_CLK2_50) begin - reg [1:0] resetd, resetd2; - reg old_reset; + reg [1:0] resetd, resetd2; + reg old_reset; - //latch the reset - old_reset <= reset; - if(~old_reset & reset) reset_req <= 1; + //latch the reset + old_reset <= reset; + if(~old_reset & reset) reset_req <= 1; - //special combination to set/clear the reset - //preventing of accidental reset control - if(resetd==1) reset_req <= 1; - if(resetd==2 && resetd2==0) reset_req <= 0; + //special combination to set/clear the reset + //preventing of accidental reset control + if(resetd==1) reset_req <= 1; + if(resetd==2 && resetd2==0) reset_req <= 0; - resetd <= gp_out[31:30]; - resetd2 <= resetd; + resetd <= gp_out[31:30]; + resetd2 <= resetd; end -wire clk_ctl; - -`ifndef LITE -///////////////////////// VIP version /////////////////////////////// -wire iHdmiClk = ~HDMI_TX_CLK; // Internal HDMI clock, inverted in relation to external clock -wire reset; - -vip vip -( - //Reset/Clock - .reset_reset_req(reset_req | ~cfg_ready), - .reset_reset(reset), - .reset_reset_vip(0), - - //DE10-nano has no reset signal on GPIO, so core has to emulate cold reset button. - .reset_cold_req(~btn_reset), - .reset_warm_req(0), - - //control - .ctl_address(ctl_address), - .ctl_write(ctl_write), - .ctl_writedata(ctl_writedata), - .ctl_waitrequest(ctl_waitrequest), - .ctl_clock(clk_ctl), - .ctl_reset(ctl_reset), - - //64-bit DDR3 RAM access - .ramclk1_clk(ram_clk), - .ram1_address(ram_address), - .ram1_burstcount(ram_burstcount), - .ram1_waitrequest(ram_waitrequest), - .ram1_readdata(ram_readdata), - .ram1_readdatavalid(ram_readdatavalid), - .ram1_read(ram_read), - .ram1_writedata(ram_writedata), - .ram1_byteenable(ram_byteenable), - .ram1_write(ram_write), - - //Spare 64-bit DDR3 RAM access - //currently unused - //can combine with ram1 to make a wider RAM bus (although will increase the latency) - .ramclk2_clk(0), - .ram2_address(0), - .ram2_burstcount(0), - .ram2_waitrequest(), - .ram2_readdata(), - .ram2_readdatavalid(), - .ram2_read(0), - .ram2_writedata(0), - .ram2_byteenable(0), - .ram2_write(0), - - //Video input - .in_clk(clk_vid), - .in_data({r_out, g_out, b_out}), - .in_de(de), - .in_v_sync(vs), - .in_h_sync(hs), - .in_ce(ce_pix), - .in_f(0), - - //HDMI output - .hdmi_clk(iHdmiClk), - .hdmi_data(hdmi_data), - .hdmi_de(hdmi_de), - .hdmi_v_sync(HDMI_TX_VS), - .hdmi_h_sync(HDMI_TX_HS) -); - -wire [8:0] ctl_address; -wire ctl_write; -wire [31:0] ctl_writedata; -wire ctl_waitrequest; -wire ctl_reset; -wire [7:0] ARX, ARY; - -vip_config vip_config -( - .clk(clk_ctl), - .reset(ctl_reset), - - .ARX(ARX), - .ARY(ARY), - .CFG_SET(vip_newcfg & cfg_got), - - .WIDTH(WIDTH), - .HFP(HFP), - .HBP(HBP), - .HS(HS), - .HEIGHT(HEIGHT), - .VFP(VFP), - .VBP(VBP), - .VS(VS), - .VSET(VSET), - - .address(ctl_address), - .write(ctl_write), - .writedata(ctl_writedata), - .waitrequest(ctl_waitrequest) -); -`endif - - -///////////////////////// Lite version //////////////////////////////// - -//`ifdef LITE - -`ifndef LITE -wire [11:0] x; -wire [11:0] y; - -sync_vg #(.X_BITS(12), .Y_BITS(12)) sync_vg -( - .clk(iHdmiClk), - .reset(reset), - .v_total(HEIGHT+VFP+VBP+VS), - .v_fp(VFP), - .v_bp(VBP), - .v_sync(VS), - .h_total(WIDTH+HFP+HBP+HS), - .h_fp(HFP), - .h_bp(HBP), - .h_sync(HS), - .hv_offset(0), - .vde_out(vde), - .hde_out(hde), - .vs_out(vs_hdmi), - .v_count_out(), - .h_count_out(), - .x_out(x), - .y_out(y), - .hs_out(hs_hdmi) -); - -wire vde, hde; -wire vs_hdmi; -wire hs_hdmi; - -/* -pattern_vg -#( - .B(8), // Bits per channel - .X_BITS(12), - .Y_BITS(12), - .FRACTIONAL_BITS(12) // Number of fractional bits for ramp pattern -) -pattern_vg -( - .reset(reset), - .clk_in(iHdmiClk), - .x(x), - .y(y), - .vn_in(vs_hdmi), - .hn_in(hs_hdmi), - .dn_in(vde & hde), - .r_in(0), - .g_in(0), - .b_in(0), - .vn_out(HDMI_TX_VS), - .hn_out(HDMI_TX_HS), - .den_out(HDMI_TX_DE), - .r_out(hdmi_data[23:16]), - .g_out(hdmi_data[15:8]), - .b_out(hdmi_data[7:0]), - .total_active_pix(WIDTH), - .total_active_lines(HEIGHT), - .pattern(4), - .ramp_step(20'h0333) -); -*/ - -`endif +//////////////////// SYSTEM MEMORY & SCALER ///////////////////////// wire reset; +wire clk_100m; + sysmem_lite sysmem ( - //Reset/Clock - .reset_reset_req(reset_req), - .reset_reset(reset), - .ctl_clock(clk_ctl), + //Reset/Clock + .reset_core_req(reset_req), + .reset_out(reset), + .clock(clk_100m), - //DE10-nano has no reset signal on GPIO, so core has to emulate cold reset button. - .reset_cold_req(~btn_reset), - .reset_warm_req(0), + //DE10-nano has no reset signal on GPIO, so core has to emulate cold reset button. + .reset_hps_cold_req(btn_r), - //64-bit DDR3 RAM access - .ramclk1_clk(ram_clk), - .ram1_address(ram_address), - .ram1_burstcount(ram_burstcount), - .ram1_waitrequest(ram_waitrequest), - .ram1_readdata(ram_readdata), - .ram1_readdatavalid(ram_readdatavalid), - .ram1_read(ram_read), - .ram1_writedata(ram_writedata), - .ram1_byteenable(ram_byteenable), - .ram1_write(ram_write), + //64-bit DDR3 RAM access + .ram1_clk(ram_clk), + .ram1_address(ram_address), + .ram1_burstcount(ram_burstcount), + .ram1_waitrequest(ram_waitrequest), + .ram1_readdata(ram_readdata), + .ram1_readdatavalid(ram_readdatavalid), + .ram1_read(ram_read), + .ram1_writedata(ram_writedata), + .ram1_byteenable(ram_byteenable), + .ram1_write(ram_write), - //Spare 64-bit DDR3 RAM access - //currently unused - //can combine with ram1 to make a wider RAM bus (although will increase the latency) - .ramclk2_clk(0), - .ram2_address(0), - .ram2_burstcount(0), - .ram2_waitrequest(), - .ram2_readdata(), - .ram2_readdatavalid(), - .ram2_read(0), - .ram2_writedata(0), - .ram2_byteenable(0), - .ram2_write(0) + //64-bit DDR3 RAM access + .ram2_clk(clk_audio), + .ram2_address(ram2_address), + .ram2_burstcount(ram2_burstcount), + .ram2_waitrequest(ram2_waitrequest), + .ram2_readdata(ram2_readdata), + .ram2_readdatavalid(ram2_readdatavalid), + .ram2_read(ram2_read), + .ram2_writedata(ram2_writedata), + .ram2_byteenable(ram2_byteenable), + .ram2_write(ram2_write), -`ifndef LITE - , - // HDMI frame buffer - .vbuf_clk(clk_ctl), - .vbuf_address(vbuf_address), - .vbuf_burstcount(vbuf_burstcount), - .vbuf_waitrequest(vbuf_waitrequest), - .vbuf_writedata(vbuf_writedata), - .vbuf_byteenable(vbuf_byteenable), - .vbuf_write(vbuf_write), - .vbuf_readdata(vbuf_readdata), - .vbuf_readdatavalid(vbuf_readdatavalid), - .vbuf_read(vbuf_read) -`endif + //128-bit DDR3 RAM access + // HDMI frame buffer + .vbuf_clk(clk_100m), + .vbuf_address(vbuf_address), + .vbuf_burstcount(vbuf_burstcount), + .vbuf_waitrequest(vbuf_waitrequest), + .vbuf_writedata(vbuf_writedata), + .vbuf_byteenable(vbuf_byteenable), + .vbuf_write(vbuf_write), + .vbuf_readdata(vbuf_readdata), + .vbuf_readdatavalid(vbuf_readdatavalid), + .vbuf_read(vbuf_read) ); -`ifndef LITE +wire [28:0] ram2_address; +wire [7:0] ram2_burstcount; +wire [7:0] ram2_byteenable; +wire ram2_waitrequest; +wire [63:0] ram2_readdata; +wire [63:0] ram2_writedata; +wire ram2_readdatavalid; +wire ram2_read; +wire ram2_write; +wire [7:0] ram2_bcnt; + +ddr_svc ddr_svc +( + .clk(clk_audio), + + .ram_waitrequest(ram2_waitrequest), + .ram_burstcnt(ram2_burstcount), + .ram_addr(ram2_address), + .ram_readdata(ram2_readdata), + .ram_read_ready(ram2_readdatavalid), + .ram_read(ram2_read), + .ram_writedata(ram2_writedata), + .ram_byteenable(ram2_byteenable), + .ram_write(ram2_write), + .ram_bcnt(ram2_bcnt), + + .ch0_addr(alsa_address), + .ch0_burst(1), + .ch0_data(alsa_readdata), + .ch0_req(alsa_req), + .ch0_ready(alsa_ready), + + .ch1_addr(pal_addr), + .ch1_burst(128), + .ch1_data(pal_data), + .ch1_req(pal_req), + .ch1_ready(pal_wr) +); + +wire clk_pal = clk_audio; + + wire [27:0] vbuf_address; wire [7:0] vbuf_burstcount; wire vbuf_waitrequest; @@ -544,57 +613,325 @@ wire [127:0] vbuf_writedata; wire [15:0] vbuf_byteenable; wire vbuf_write; -assign HDMI_TX_VS = vs_hdmi; -assign HDMI_TX_HS = hs_hdmi; +wire [23:0] hdmi_data; +wire hdmi_vs, hdmi_hs, hdmi_de, hdmi_vbl; +wire freeze; -hdmi_lite hdmi_lite +`ifndef MISTER_DEBUG_NOHDMI +wire clk_hdmi = hdmi_clk_out; + +ascal +#( + .RAMBASE(32'h20000000), +`ifndef MISTER_FB + .PALETTE2("false"), +`else + `ifndef MISTER_FB_PALETTE + .PALETTE2("false"), + `endif +`endif + .N_DW(128), + .N_AW(28) +) +ascal ( - .reset(reset), + .reset_na (~reset_req), + .run (1), + .freeze (freeze), - .clk_video(clk_vid), - .ce_pixel(ce_pix), - .video_vs(vs), - .video_de(de), - .video_d({r_out,g_out,b_out}), + .i_clk (clk_ihdmi), + .i_ce (ce_hpix), + .i_r (hr_out), + .i_g (hg_out), + .i_b (hb_out), + .i_hs (hhs_fix), + .i_vs (hvs_fix), + .i_fl (f1), + .i_de (hde_emu), + .iauto (1), + .himin (0), + .himax (0), + .vimin (0), + .vimax (0), - .clk_hdmi(HDMI_TX_CLK), - .hdmi_hde(hde), - .hdmi_vde(vde), - .hdmi_d(hdmi_data), - .hdmi_de(hdmi_de), + .o_clk (clk_hdmi), + .o_ce (scaler_out), + .o_r (hdmi_data[23:16]), + .o_g (hdmi_data[15:8]), + .o_b (hdmi_data[7:0]), + .o_hs (hdmi_hs), + .o_vs (hdmi_vs), + .o_de (hdmi_de), + .o_vbl (hdmi_vbl), + .o_lltune (lltune), + .htotal (WIDTH + HFP + HBP + HS), + .hsstart (WIDTH + HFP), + .hsend (WIDTH + HFP + HS), + .hdisp (WIDTH), + .hmin (hmin), + .hmax (hmax), + .vtotal (HEIGHT + VFP + VBP + VS), + .vsstart (HEIGHT + VFP), + .vsend (HEIGHT + VFP + VS), + .vdisp (HEIGHT), + .vmin (vmin), + .vmax (vmax), - .screen_w(WIDTH), - .screen_h(HEIGHT), - .quadbuf(1), - .scale_x(0), - .scale_y(0), - .scale_auto(1), + .mode ({~lowlat,LFB_EN ? LFB_FLT : |scaler_flt,2'b00}), + .poly_clk (clk_sys), + .poly_a (coef_addr), + .poly_dw (coef_data), + .poly_wr (coef_wr), - .clk_vbuf(clk_ctl), - .vbuf_address(vbuf_address), - .vbuf_burstcount(vbuf_burstcount), - .vbuf_waitrequest(vbuf_waitrequest), - .vbuf_writedata(vbuf_writedata), - .vbuf_byteenable(vbuf_byteenable), - .vbuf_write(vbuf_write), - .vbuf_readdata(vbuf_readdata), - .vbuf_readdatavalid(vbuf_readdatavalid), - .vbuf_read(vbuf_read) + .pal1_clk (clk_pal), + .pal1_dw (pal_d), + .pal1_a (pal_a), + .pal1_wr (pal_wr), + +`ifdef MISTER_FB + `ifdef MISTER_FB_PALETTE + .pal2_clk (fb_pal_clk), + .pal2_dw (fb_pal_d), + .pal2_dr (fb_pal_q), + .pal2_a (fb_pal_a), + .pal2_wr (fb_pal_wr), + .pal_n (fb_en), + `endif +`endif + + .o_fb_ena (FB_EN), + .o_fb_hsize (FB_WIDTH), + .o_fb_vsize (FB_HEIGHT), + .o_fb_format (FB_FMT), + .o_fb_base (FB_BASE), + .o_fb_stride (FB_STRIDE), + + .avl_clk (clk_100m), + .avl_waitrequest (vbuf_waitrequest), + .avl_readdata (vbuf_readdata), + .avl_readdatavalid(vbuf_readdatavalid), + .avl_burstcount (vbuf_burstcount), + .avl_writedata (vbuf_writedata), + .avl_address (vbuf_address), + .avl_write (vbuf_write), + .avl_read (vbuf_read), + .avl_byteenable (vbuf_byteenable) +); +`endif + +reg LFB_EN = 0; +reg LFB_FLT = 0; +reg [5:0] LFB_FMT = 0; +reg [11:0] LFB_WIDTH = 0; +reg [11:0] LFB_HEIGHT = 0; +reg [11:0] LFB_HMIN = 0; +reg [11:0] LFB_HMAX = 0; +reg [11:0] LFB_VMIN = 0; +reg [11:0] LFB_VMAX = 0; +reg [31:0] LFB_BASE = 0; +reg [13:0] LFB_STRIDE = 0; + +reg FB_EN = 0; +reg [5:0] FB_FMT = 0; +reg [11:0] FB_WIDTH = 0; +reg [11:0] FB_HEIGHT = 0; +reg [31:0] FB_BASE = 0; +reg [13:0] FB_STRIDE = 0; + +always @(posedge clk_sys) begin + FB_EN <= LFB_EN | fb_en; + if(LFB_EN) begin + FB_FMT <= LFB_FMT; + FB_WIDTH <= LFB_WIDTH; + FB_HEIGHT <= LFB_HEIGHT; + FB_BASE <= LFB_BASE; + FB_STRIDE <= LFB_STRIDE; + end + else begin + FB_FMT <= fb_fmt; + FB_WIDTH <= fb_width; + FB_HEIGHT <= fb_height; + FB_BASE <= fb_base; + FB_STRIDE <= fb_stride; + end +end + +`ifdef MISTER_FB +reg fb_vbl; +always @(posedge clk_vid) fb_vbl <= hdmi_vbl; +`endif + +reg ar_md_start; +wire ar_md_busy; +reg [11:0] ar_md_mul1, ar_md_mul2, ar_md_div; +wire [11:0] ar_md_res; + +sys_umuldiv #(12,12,12) ar_muldiv +( + .clk(clk_vid), + .start(ar_md_start), + .busy(ar_md_busy), + + .mul1(ar_md_mul1), + .mul2(ar_md_mul2), + .div(ar_md_div), + .result(ar_md_res) ); +reg [11:0] hmin; +reg [11:0] hmax; +reg [11:0] vmin; +reg [11:0] vmax; +reg [11:0] hdmi_height; +reg [11:0] hdmi_width; + +always @(posedge clk_vid) begin + reg [11:0] hmini,hmaxi,vmini,vmaxi; + reg [11:0] wcalc,videow,arx; + reg [11:0] hcalc,videoh,ary; + reg [2:0] state; + reg xy; + + hdmi_height <= (VSET && (VSET < HEIGHT)) ? VSET : HEIGHT; + hdmi_width <= (HSET && (HSET < WIDTH)) ? HSET : WIDTH; + + if(!ARY) begin + if(ARX == 1) begin + arx <= arc1x[11:0]; + ary <= arc1y[11:0]; + xy <= arc1x[12] | arc1y[12]; + end + else if(ARX == 2) begin + arx <= arc2x[11:0]; + ary <= arc2y[11:0]; + xy <= arc2x[12] | arc2y[12]; + end + else begin + arx <= 0; + ary <= 0; + xy <= 0; + end + end + else begin + arx <= ARX[11:0]; + ary <= ARY[11:0]; + xy <= ARX[12] | ARY[12]; + end + + ar_md_start <= 0; + state <= state + 1'd1; + case(state) + 0: if(LFB_EN) begin + hmini <= LFB_HMIN; + vmini <= LFB_VMIN; + hmaxi <= LFB_HMAX; + vmaxi <= LFB_VMAX; + state <= 0; + end + else if(FREESCALE || !arx || !ary) begin + wcalc <= hdmi_width; + hcalc <= hdmi_height; + state <= 6; + end + else if(xy) begin + wcalc <= arx; + hcalc <= ary; + state <= 6; + end + + 1: begin + ar_md_mul1 <= hdmi_height; + ar_md_mul2 <= arx; + ar_md_div <= ary; + ar_md_start<= 1; + end + 2: begin + wcalc <= ar_md_res; + if(ar_md_start | ar_md_busy) state <= 2; + end + + 3: begin + ar_md_mul1 <= hdmi_width; + ar_md_mul2 <= ary; + ar_md_div <= arx; + ar_md_start<= 1; + end + 4: begin + hcalc <= ar_md_res; + if(ar_md_start | ar_md_busy) state <= 4; + end + + 6: begin + videow <= (wcalc > hdmi_width) ? hdmi_width : wcalc[11:0]; + videoh <= (hcalc > hdmi_height) ? hdmi_height : hcalc[11:0]; + end + + 7: begin + hmini <= ((WIDTH - videow)>>1); + hmaxi <= ((WIDTH - videow)>>1) + videow - 1'd1; + vmini <= ((HEIGHT - videoh)>>1); + vmaxi <= ((HEIGHT - videoh)>>1) + videoh - 1'd1; + end + endcase + + hmin <= hmini; + hmax <= hmaxi; + vmin <= vmini; + vmax <= vmaxi; +end + +`ifndef MISTER_DEBUG_NOHDMI +wire [15:0] lltune; +pll_hdmi_adj pll_hdmi_adj +( + .clk(FPGA_CLK1_50), + .reset_na(~reset_req), + + .llena(lowlat), + .lltune({16{hdmi_config_done | cfg_dis}} & lltune), + .locked(led_locked), + .i_waitrequest(adj_waitrequest), + .i_write(adj_write), + .i_address(adj_address), + .i_writedata(adj_data), + .o_waitrequest(cfg_waitrequest), + .o_write(cfg_write), + .o_address(cfg_address), + .o_writedata(cfg_data) +); +`else + assign led_locked = 0; `endif +wire [63:0] pal_data; +wire [47:0] pal_d = {pal_data[55:32], pal_data[23:0]}; +wire [6:0] pal_a = ram2_bcnt[6:0]; +wire pal_wr; + +reg [28:0] pal_addr; +reg pal_req = 0; +always @(posedge clk_pal) begin + reg old_vs1, old_vs2; + + pal_addr <= LFB_BASE[31:3] - 29'd512; + + old_vs1 <= hdmi_vs; + old_vs2 <= old_vs1; + + if(~old_vs2 & old_vs1 & ~FB_FMT[2] & FB_FMT[1] & FB_FMT[0] & FB_EN) pal_req <= ~pal_req; +end + ///////////////////////// HDMI output ///////////////////////////////// - -`ifndef LITE +`ifndef MISTER_DEBUG_NOHDMI +wire hdmi_clk_out; pll_hdmi pll_hdmi ( - .refclk(FPGA_CLK1_50), - .rst(reset_req), - .reconfig_to_pll(reconfig_to_pll), - .reconfig_from_pll(reconfig_from_pll), - .outclk_0(HDMI_TX_CLK) + .refclk(FPGA_CLK1_50), + .rst(reset_req), + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll), + .outclk_0(hdmi_clk_out) ); `endif @@ -607,272 +944,496 @@ reg [11:0] HEIGHT = 1080; reg [11:0] VFP = 4; reg [11:0] VS = 5; reg [11:0] VBP = 36; -reg [11:0] VSET = 0; -`ifndef LITE wire [63:0] reconfig_to_pll; wire [63:0] reconfig_from_pll; -`endif -reg cfg_write; -reg [5:0] cfg_address; -reg [31:0] cfg_data; +wire cfg_waitrequest,adj_waitrequest; +wire cfg_write; +wire [5:0] cfg_address; +wire [31:0] cfg_data; +reg adj_write; +reg [5:0] adj_address; +reg [31:0] adj_data; -`ifndef LITE -pll_hdmi_cfg pll_hdmi_cfg +`ifndef MISTER_DEBUG_NOHDMI +pll_cfg pll_cfg ( - .mgmt_clk(FPGA_CLK1_50), - .mgmt_reset(reset_req), - .mgmt_waitrequest(cfg_waitrequest), - .mgmt_read(0), - .mgmt_readdata(), - .mgmt_write(cfg_write), - .mgmt_address(cfg_address), - .mgmt_writedata(cfg_data), - .reconfig_to_pll(reconfig_to_pll), - .reconfig_from_pll(reconfig_from_pll) + .mgmt_clk(FPGA_CLK1_50), + .mgmt_reset(reset_req), + .mgmt_waitrequest(cfg_waitrequest), + .mgmt_read(0), + .mgmt_readdata(), + .mgmt_write(cfg_write), + .mgmt_address(cfg_address), + .mgmt_writedata(cfg_data), + .reconfig_to_pll(reconfig_to_pll), + .reconfig_from_pll(reconfig_from_pll) ); -`endif -`ifndef LITE -reg cfg_ready = 0; -wire cfg_waitrequest; -`else -reg cfg_ready = 1; -wire cfg_waitrequest = 1; -`endif - -always @(posedge FPGA_CLK1_50) begin - reg gotd = 0, gotd2 = 0; - reg custd = 0, custd2 = 0; - reg old_wait = 0; - - gotd <= cfg_got; - gotd2 <= gotd; - - cfg_write <= 0; - - custd <= cfg_custom_t; - custd2 <= custd; - if(custd2 != custd & ~gotd) begin - cfg_address <= cfg_custom_p1; - cfg_data <= cfg_custom_p2; - cfg_write <= 1; - end - - if(~gotd2 & gotd) begin - cfg_address <= 2; - cfg_data <= 0; - cfg_write <= 1; - end - - old_wait <= cfg_waitrequest; - if(old_wait & ~cfg_waitrequest & gotd) cfg_ready <= 1; +reg cfg_got = 0; +always @(posedge clk_sys) begin + reg vsd, vsd2; + if(~cfg_ready || ~cfg_set) cfg_got <= cfg_set; + else begin + vsd <= HDMI_TX_VS; + vsd2 <= vsd; + if(~vsd2 & vsd) cfg_got <= cfg_set; + end end -`ifndef LITE +reg cfg_ready = 0; +always @(posedge FPGA_CLK1_50) begin + reg gotd = 0, gotd2 = 0; + reg custd = 0, custd2 = 0; + reg old_wait = 0; + + gotd <= cfg_got; + gotd2 <= gotd; + + adj_write <= 0; + + custd <= cfg_custom_t; + custd2 <= custd; + if(custd2 != custd & ~gotd) begin + adj_address <= cfg_custom_p1; + adj_data <= cfg_custom_p2; + adj_write <= 1; + end + + if(~gotd2 & gotd) begin + adj_address <= 2; + adj_data <= 0; + adj_write <= 1; + end + + old_wait <= adj_waitrequest; + if(old_wait & ~adj_waitrequest & gotd) cfg_ready <= 1; +end + +`else + +wire cfg_ready = 1; + +`endif + +wire hdmi_config_done; hdmi_config hdmi_config ( - .iCLK(FPGA_CLK1_50), - .iRST_N(cfg_ready & ~HDMI_TX_INT), + .iCLK(FPGA_CLK1_50), + .iRST_N(cfg_ready & ~HDMI_TX_INT & ~cfg_dis), + .done(hdmi_config_done), - .I2C_SCL(HDMI_I2C_SCL), - .I2C_SDA(HDMI_I2C_SDA), + .I2C_SCL(HDMI_I2C_SCL), + .I2C_SDA(HDMI_I2C_SDA), - .dvi_mode(dvi_mode), - .audio_96k(audio_96k) + .dvi_mode(dvi_mode), + .audio_96k(audio_96k), + .limited(hdmi_limited), + .ypbpr(ypbpr_en & direct_video) ); -wire [23:0] hdmi_data; -wire hdmi_de; +assign HDMI_I2C_SCL = hdmi_scl_en ? 1'b0 : 1'bZ; +assign HDMI_I2C_SDA = hdmi_sda_en ? 1'b0 : 1'bZ; + +wire hdmi_scl_en, hdmi_sda_en; +cyclonev_hps_interface_peripheral_i2c hdmi_i2c +( + .out_clk(hdmi_scl_en), + .scl(HDMI_I2C_SCL), + .out_data(hdmi_sda_en), + .sda(HDMI_I2C_SDA) +); + +`ifndef MISTER_DEBUG_NOHDMI +wire [23:0] hdmi_data_sl; +wire hdmi_de_sl, hdmi_vs_sl, hdmi_hs_sl; + +`ifdef MISTER_FB +reg dis_output; +always @(posedge clk_hdmi) begin + reg dis; + dis <= fb_force_blank; + dis_output <= dis; +end +`else +wire dis_output = 0; +`endif + +scanlines #(1) HDMI_scanlines +( + .clk(clk_hdmi), + + .scanlines(scanlines), + .din(dis_output ? 24'd0 : hdmi_data), + .hs_in(hdmi_hs), + .vs_in(hdmi_vs), + .de_in(hdmi_de), + + .dout(hdmi_data_sl), + .hs_out(hdmi_hs_sl), + .vs_out(hdmi_vs_sl), + .de_out(hdmi_de_sl) +); + +wire [23:0] hdmi_data_osd; +wire hdmi_de_osd, hdmi_vs_osd, hdmi_hs_osd; osd hdmi_osd ( - .clk_sys(clk_sys), + .clk_sys(clk_sys), - .io_osd(io_osd), - .io_strobe(io_strobe), - .io_din(io_din), + .io_osd(io_osd_hdmi), + .io_strobe(io_strobe), + .io_din(io_din), - .clk_video(iHdmiClk), - .din(hdmi_data), - .dout(HDMI_TX_D), - .de_in(hdmi_de), - .de_out(HDMI_TX_DE) -); + .clk_video(clk_hdmi), + .din(hdmi_data_sl), + .hs_in(hdmi_hs_sl), + .vs_in(hdmi_vs_sl), + .de_in(hdmi_de_sl), -assign HDMI_MCLK = 0; -i2s i2s -( - .reset(~cfg_ready), - .clk_sys(FPGA_CLK3_50), - .half_rate(~audio_96k), - - .sclk(HDMI_SCLK), - .lrclk(HDMI_LRCLK), - .sdata(HDMI_I2S), - - //Could inverse the MSB but it will shift 0 level to -MAX level - .left_chan (audio_l >> !audio_s), - .right_chan(audio_r >> !audio_s) + .dout(hdmi_data_osd), + .hs_out(hdmi_hs_osd), + .vs_out(hdmi_vs_osd), + .de_out(hdmi_de_osd) ); `endif +wire hdmi_cs_osd; +csync csync_hdmi(clk_hdmi, hdmi_hs_osd, hdmi_vs_osd, hdmi_cs_osd); + +reg [23:0] dv_data; +reg dv_hs, dv_vs, dv_de; +always @(posedge clk_vid) begin + reg [23:0] dv_d1, dv_d2; + reg dv_de1, dv_de2, dv_hs1, dv_hs2, dv_vs1, dv_vs2; + reg [12:0] vsz, vcnt; + reg old_hs, old_vs; + reg vde; + reg [3:0] hss; + + if(ce_pix) begin + hss <= (hss << 1) | vga_hs_osd; + + old_hs <= vga_hs_osd; + if(~old_hs && vga_hs_osd) begin + old_vs <= vga_vs_osd; + if(~&vcnt) vcnt <= vcnt + 1'd1; + if(~old_vs & vga_vs_osd & ~f1) vsz <= vcnt; + if(old_vs & ~vga_vs_osd) vcnt <= 0; + + if(vcnt == 1) vde <= 1; + if(vcnt == vsz - 3) vde <= 0; + end + + dv_de1 <= !{hss,vga_hs_osd} && vde; + dv_hs1 <= csync_en ? vga_cs_osd : vga_hs_osd; + dv_vs1 <= vga_vs_osd; + end + + dv_d1 <= vga_data_osd; + dv_d2 <= dv_d1; + dv_de2 <= dv_de1; + dv_hs2 <= dv_hs1; + dv_vs2 <= dv_vs1; + + dv_data<= dv_d2; + dv_de <= dv_de2; + dv_hs <= dv_hs2; + dv_vs <= dv_vs2; +end + +wire hdmi_tx_clk; +`ifndef MISTER_DEBUG_NOHDMI +cyclonev_clkselect hdmi_clk_sw +( + .clkselect({1'b1, ~vga_fb & direct_video}), + .inclk({clk_vid, hdmi_clk_out, 2'b00}), + .outclk(hdmi_tx_clk) +); +`else +assign hdmi_tx_clk = clk_vid; +`endif + +altddio_out +#( + .extend_oe_disable("OFF"), + .intended_device_family("Cyclone V"), + .invert_output("OFF"), + .lpm_hint("UNUSED"), + .lpm_type("altddio_out"), + .oe_reg("UNREGISTERED"), + .power_up_high("OFF"), + .width(1) +) +hdmiclk_ddr +( + .datain_h(1'b0), + .datain_l(1'b1), + .outclock(hdmi_tx_clk), + .dataout(HDMI_TX_CLK), + .aclr(1'b0), + .aset(1'b0), + .oe(1'b1), + .outclocken(1'b1), + .sclr(1'b0), + .sset(1'b0) +); + +reg hdmi_out_hs; +reg hdmi_out_vs; +reg hdmi_out_de; +reg [23:0] hdmi_out_d; + +always @(posedge hdmi_tx_clk) begin + reg hs,vs,de; + reg [23:0] d; + + hs <= (~vga_fb & direct_video) ? dv_hs : (direct_video & csync_en) ? hdmi_cs_osd : hdmi_hs_osd; + vs <= (~vga_fb & direct_video) ? dv_vs : hdmi_vs_osd; + de <= (~vga_fb & direct_video) ? dv_de : hdmi_de_osd; + d <= (~vga_fb & direct_video) ? dv_data : hdmi_data_osd; + + hdmi_out_hs <= hs; + hdmi_out_vs <= vs; + hdmi_out_de <= de; + hdmi_out_d <= d; +end + +assign HDMI_TX_HS = hdmi_out_hs; +assign HDMI_TX_VS = hdmi_out_vs; +assign HDMI_TX_DE = hdmi_out_de; +assign HDMI_TX_D = hdmi_out_d; ///////////////////////// VGA output ////////////////////////////////// -wire [23:0] vga_q; +wire [23:0] vga_data_sl; +wire vga_de_sl, vga_vs_sl, vga_hs_sl; +scanlines #(0) VGA_scanlines +( + .clk(clk_vid), + + .scanlines(scanlines), + .din(de_emu ? {r_out, g_out, b_out} : 24'd0), + .hs_in(hs_fix), + .vs_in(vs_fix), + .de_in(de_emu), + + .dout(vga_data_sl), + .hs_out(vga_hs_sl), + .vs_out(vga_vs_sl), + .de_out(vga_de_sl) +); + +wire [23:0] vga_data_osd; +wire vga_vs_osd, vga_hs_osd; osd vga_osd ( - .clk_sys(clk_sys), + .clk_sys(clk_sys), - .io_osd(io_osd), - .io_strobe(io_strobe), - .io_din(io_din), + .io_osd(io_osd_vga), + .io_strobe(io_strobe), + .io_din(io_din), + .osd_status(osd_status), - .clk_video(clk_vid), - .din(de ? {r_out, g_out, b_out} : 24'd0), - .dout(vga_q), - .de_in(de) + .clk_video(clk_vid), + .din(vga_data_sl), + .hs_in(vga_hs_sl), + .vs_in(vga_vs_sl), + .de_in(vga_de_sl), + + .dout(vga_data_osd), + .hs_out(vga_hs_osd), + .vs_out(vga_vs_osd) ); -wire [23:0] vga_o; +wire vga_cs_osd; +csync csync_vga(clk_vid, vga_hs_osd, vga_vs_osd, vga_cs_osd); -vga_out vga_out -( - .ypbpr_full(1), - .ypbpr_en(ypbpr_en), - .dout(vga_o), -`ifdef LITE - .din(vga_q) -`else - .din(vga_scaler ? {24{HDMI_TX_DE}} & HDMI_TX_D : vga_q) -`endif -); +`ifndef MISTER_DUAL_SDRAM + wire [23:0] vgas_o; + wire vgas_hs, vgas_vs, vgas_cs; + vga_out vga_scaler_out + ( + .clk(clk_hdmi), + .ypbpr_en(ypbpr_en), + .hsync(hdmi_hs_osd), + .vsync(hdmi_vs_osd), + .csync(hdmi_cs_osd), + .dout(vgas_o), + .din({24{hdmi_de_osd}} & hdmi_data_osd), + .hsync_o(vgas_hs), + .vsync_o(vgas_vs), + .csync_o(vgas_cs) + ); -`ifdef LITE - wire vs1 = vs; - wire hs1 = hs; -`else - wire vs1 = vga_scaler ? HDMI_TX_VS : vs; - wire hs1 = vga_scaler ? HDMI_TX_HS : hs; + wire [23:0] vga_o; + wire vga_hs, vga_vs, vga_cs; + vga_out vga_out + ( + .clk(clk_vid), + .ypbpr_en(ypbpr_en), + .hsync(vga_hs_osd), + .vsync(vga_vs_osd), + .csync(vga_cs_osd), + .dout(vga_o), + .din(vga_data_osd), + .hsync_o(vga_hs), + .vsync_o(vga_vs), + .csync_o(vga_cs) + ); + + wire cs1 = (vga_fb | vga_scaler) ? vgas_cs : vga_cs; + + assign VGA_VS = (VGA_EN | SW[3]) ? 1'bZ : ((vga_fb | vga_scaler) ? ~vgas_vs : ~vga_vs) | csync_en; + assign VGA_HS = (VGA_EN | SW[3]) ? 1'bZ : (vga_fb | vga_scaler) ? (csync_en ? ~vgas_cs : ~vgas_hs) : (csync_en ? ~vga_cs : ~vga_hs); + assign VGA_R = (VGA_EN | SW[3]) ? 6'bZZZZZZ : (vga_fb | vga_scaler) ? vgas_o[23:18] : vga_o[23:18]; + assign VGA_G = (VGA_EN | SW[3]) ? 6'bZZZZZZ : (vga_fb | vga_scaler) ? vgas_o[15:10] : vga_o[15:10]; + assign VGA_B = (VGA_EN | SW[3]) ? 6'bZZZZZZ : (vga_fb | vga_scaler) ? vgas_o[7:2] : vga_o[7:2] ; `endif -assign VGA_VS = VGA_EN ? 1'bZ : csync ? 1'b1 : ~vs1; -assign VGA_HS = VGA_EN ? 1'bZ : csync ? ~(vs1 ^ hs1) : ~hs1; -assign VGA_R = VGA_EN ? 6'bZZZZZZ : vga_o[23:18]; -assign VGA_G = VGA_EN ? 6'bZZZZZZ : vga_o[15:10]; -assign VGA_B = VGA_EN ? 6'bZZZZZZ : vga_o[7:2]; -//assign VGA_VS = ~vs1; -//assign VGA_HS = ~hs1; -//assign VGA_R = vga_o[23:18]; -//assign VGA_G = vga_o[15:10]; -//assign VGA_B = vga_o[7:2]; +reg video_sync = 0; +always @(posedge clk_vid) begin + reg [11:0] line_cnt = 0; + reg [11:0] sync_line = 0; + reg [1:0] hs_cnt = 0; + reg old_hs; -// For core -> VGA direct connectivity, comment out vga_osd, vga_out and the above assign statements, then -// uncomment these signals for direct core -> VGA connectivity. -// -//assign VGA_VS = ~vs; -//assign VGA_HS = ~hs; -//assign VGA_R = r_out; -//assign VGA_G = g_out; -//assign VGA_B = b_out; + old_hs <= hs_fix; + if(~old_hs & hs_fix) begin + + video_sync <= (sync_line == line_cnt); + + line_cnt <= line_cnt + 1'd1; + if(~hs_cnt[1]) begin + hs_cnt <= hs_cnt + 1'd1; + if(hs_cnt[0]) begin + sync_line <= (line_cnt - vs_line); + line_cnt <= 0; + end + end + end + + if(de_emu) hs_cnt <= 0; +end ///////////////////////// Audio output //////////////////////////////// -wire al, ar, aspdif; +assign SDCD_SPDIF =(SW[3] & ~spdif) ? 1'b0 : 1'bZ; -sigma_delta_dac #(15) dac_l -( - .CLK(FPGA_CLK3_50), - .RESET(reset), - .DACin({audio_l[15] ^ audio_s, audio_l[14:0]}), - .DACout(al) -); +`ifndef MISTER_DUAL_SDRAM + wire analog_l, analog_r; -sigma_delta_dac #(15) dac_r -( - .CLK(FPGA_CLK3_50), - .RESET(reset), - .DACin({audio_r[15] ^ audio_s, audio_r[14:0]}), - .DACout(ar) -); - -spdif toslink -( - .clk_i(FPGA_CLK3_50), - - .rst_i(reset), - .half_rate(0), - - .audio_l(audio_l >> !audio_s), - .audio_r(audio_r >> !audio_s), - - .spdif_o(aspdif) -); - -`ifndef LITE -assign AUDIO_SPDIF = SW[0] ? HDMI_LRCLK : aspdif; -assign AUDIO_R = SW[0] ? HDMI_I2S : ar; -assign AUDIO_L = SW[0] ? HDMI_SCLK : al; -`else -assign AUDIO_SPDIF = aspdif; -assign AUDIO_R = ar; -assign AUDIO_L = al; + assign AUDIO_SPDIF = SW[3] ? 1'bZ : SW[0] ? HDMI_LRCLK : spdif; + assign AUDIO_R = SW[3] ? 1'bZ : SW[0] ? HDMI_I2S : analog_r; + assign AUDIO_L = SW[3] ? 1'bZ : SW[0] ? HDMI_SCLK : analog_l; `endif -reg [15:0] audio_l; -reg [15:0] audio_r; +assign HDMI_MCLK = clk_audio; +wire clk_audio; -always @(posedge FPGA_CLK3_50) begin - reg signed [15:0] al; - reg signed [15:0] ar; +pll_audio pll_audio +( + .refclk(FPGA_CLK3_50), + .rst(0), + .outclk_0(clk_audio) +); - case({audio_s,audio_mix}) - 'b000: al <= audio_ls; - 'b001: al <= audio_ls - (audio_ls >> 3) + (audio_rs >> 3); - 'b010: al <= audio_ls - (audio_ls >> 2) + (audio_rs >> 2); - 'b011: al <= (audio_ls >> 1) + (audio_rs >> 1); - 'b100: al <= audio_ls; - 'b101: al <= audio_ls - (audio_ls >>> 3) + (audio_rs >>> 3); - 'b110: al <= audio_ls - (audio_ls >>> 2) + (audio_rs >>> 2); - 'b111: al <= (audio_ls >>> 1) + (audio_rs >>> 1); - endcase +wire spdif; +audio_out audio_out +( + .reset(reset | areset), + .clk(clk_audio), + + .att(vol_att), + .mix(audio_mix), + .sample_rate(audio_96k), + + .flt_rate(aflt_rate), + .cx(acx), + .cx0(acx0), + .cx1(acx1), + .cx2(acx2), + .cy0(acy0), + .cy1(acy1), + .cy2(acy2), + + .is_signed(audio_s), + .core_l(audio_l), + .core_r(audio_r), + + .alsa_l(alsa_l), + .alsa_r(alsa_r), + + .i2s_bclk(HDMI_SCLK), + .i2s_lrclk(HDMI_LRCLK), + .i2s_data(HDMI_I2S), +`ifndef MISTER_DUAL_SDRAM + .dac_l(analog_l), + .dac_r(analog_r), +`endif + .spdif(spdif) +); + + +wire [28:0] alsa_address; +wire [63:0] alsa_readdata; +wire alsa_ready; +wire alsa_req; +wire alsa_late; + +wire [15:0] alsa_l, alsa_r; + +alsa alsa +( + .reset(reset), + .clk(clk_audio), + + .ram_address(alsa_address), + .ram_data(alsa_readdata), + .ram_req(alsa_req), + .ram_ready(alsa_ready), + + .spi_ss(aspi_ss), + .spi_sck(aspi_sck), + .spi_mosi(aspi_mosi), + .spi_miso(aspi_miso), + + .pcm_l(alsa_l), + .pcm_r(alsa_r) +); + +//////////////// User I/O (USB 3.0 connector) ///////////////////////// + +assign USER_IO[0] = !user_out[0] ? 1'b0 : 1'bZ; +assign USER_IO[1] = !user_out[1] ? 1'b0 : 1'bZ; +assign USER_IO[2] = !(SW[1] ? HDMI_I2S : user_out[2]) ? 1'b0 : 1'bZ; +assign USER_IO[3] = !user_out[3] ? 1'b0 : 1'bZ; +assign USER_IO[4] = !(SW[1] ? HDMI_SCLK : user_out[4]) ? 1'b0 : 1'bZ; +assign USER_IO[5] = !(SW[1] ? HDMI_LRCLK : user_out[5]) ? 1'b0 : 1'bZ; +assign USER_IO[6] = !user_out[6] ? 1'b0 : 1'bZ; + +assign user_in[0] = USER_IO[0]; +assign user_in[1] = USER_IO[1]; +assign user_in[2] = SW[1] | USER_IO[2]; +assign user_in[3] = USER_IO[3]; +assign user_in[4] = SW[1] | USER_IO[4]; +assign user_in[5] = SW[1] | USER_IO[5]; +assign user_in[6] = USER_IO[6]; - case({audio_s,audio_mix}) - 'b000: ar <= audio_rs; - 'b001: ar <= audio_rs - (audio_rs >> 3) + (audio_ls >> 3); - 'b010: ar <= audio_rs - (audio_rs >> 2) + (audio_ls >> 2); - 'b011: ar <= (audio_rs >> 1) + (audio_ls >> 1); - 'b100: ar <= audio_rs; - 'b101: ar <= audio_rs - (audio_rs >>> 3) + (audio_ls >>> 3); - 'b110: ar <= audio_rs - (audio_rs >>> 2) + (audio_ls >>> 2); - 'b111: ar <= (audio_rs >>> 1) + (audio_ls >>> 1); - endcase - - if(vol_att[4]) begin - audio_l <= 0; - audio_r <= 0; - end - else - if(audio_s) begin - audio_l <= al >>> vol_att[3:0]; - audio_r <= ar >>> vol_att[3:0]; - end - else - begin - audio_l <= al >> vol_att[3:0]; - audio_r <= ar >> vol_att[3:0]; - end -end /////////////////// User module connection //////////////////////////// -wire signed [15:0] audio_ls, audio_rs; +wire clk_sys; +wire [15:0] audio_l, audio_r; wire audio_s; wire [1:0] audio_mix; -wire [7:0] r_out, g_out, b_out; -wire vs, hs, de; -wire clk_sys, clk_vid, ce_pix; +wire [1:0] scanlines; +wire [7:0] r_out, g_out, b_out, hr_out, hg_out, hb_out; +wire vs_fix, hs_fix, de_emu, vs_emu, hs_emu, f1; +wire hvs_fix, hhs_fix, hde_emu; +wire clk_vid, ce_pix, clk_ihdmi, ce_hpix; +wire vga_force_scaler; wire ram_clk; wire [28:0] ram_address; @@ -888,117 +1449,248 @@ wire ram_write; wire led_user; wire [1:0] led_power; wire [1:0] led_disk; +wire [1:0] btn; -wire vs_emu, hs_emu; -sync_fix sync_v(FPGA_CLK3_50, vs_emu, vs); -sync_fix sync_h(FPGA_CLK3_50, hs_emu, hs); +sync_fix sync_v(clk_vid, vs_emu, vs_fix); +sync_fix sync_h(clk_vid, hs_emu, hs_fix); + +wire [6:0] user_out, user_in; + +assign clk_ihdmi= clk_vid; +assign ce_hpix = ce_pix; +assign hr_out = r_out; +assign hg_out = g_out; +assign hb_out = b_out; +assign hhs_fix = hs_fix; +assign hvs_fix = vs_fix; +assign hde_emu = de_emu; + +wire uart_dtr; +wire uart_dsr; +wire uart_cts; +wire uart_rts; +wire uart_rxd; +wire uart_txd; + +wire osd_status; + +wire fb_en; +wire [4:0] fb_fmt; +wire [11:0] fb_width; +wire [11:0] fb_height; +wire [31:0] fb_base; +wire [13:0] fb_stride; + + +`ifdef MISTER_FB + `ifdef MISTER_FB_PALETTE + wire fb_pal_clk; + wire [7:0] fb_pal_a; + wire [23:0] fb_pal_d; + wire [23:0] fb_pal_q; + wire fb_pal_wr; + `endif + wire fb_force_blank; +`else + assign fb_en = 0; + assign fb_fmt = 0; + assign fb_width = 0; + assign fb_height = 0; + assign fb_base = 0; + assign fb_stride = 0; +`endif emu emu ( - .CLK_50M(FPGA_CLK3_50), - .RESET(reset), + .CLK_50M(FPGA_CLK2_50), + .RESET(reset), + .HPS_BUS({f1, HDMI_TX_VS, + clk_100m, clk_ihdmi, + ce_hpix, hde_emu, hhs_fix, hvs_fix, + io_wait, clk_sys, io_fpga, io_uio, io_strobe, io_wide, io_din, io_dout}), - // 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 16b 16b - // 44 43 42 41 40 39 38 37 36 35 34 33 32 31:16 15:0 - .HPS_BUS({HDMI_TX_VS, clk_ctl, clk_vid, ce_pix, de, hs, vs, io_wait, clk_sys, io_fpga, io_uio, io_strobe, io_wide, io_din, io_dout}), + .VGA_R(r_out), + .VGA_G(g_out), + .VGA_B(b_out), + .VGA_HS(hs_emu), + .VGA_VS(vs_emu), + .VGA_DE(de_emu), + .VGA_F1(f1), + .VGA_SCALER(vga_force_scaler), - .CLK_VIDEO(clk_vid), - .CE_PIXEL(ce_pix), + .HDMI_WIDTH(direct_video ? 12'd0 : hdmi_width), + .HDMI_HEIGHT(direct_video ? 12'd0 : hdmi_height), + .HDMI_FREEZE(freeze), - .VGA_R(r_out), - .VGA_G(g_out), - .VGA_B(b_out), - .VGA_HS(hs_emu), - .VGA_VS(vs_emu), - .VGA_DE(de), + .CLK_VIDEO(clk_vid), + .CE_PIXEL(ce_pix), + .VGA_SL(scanlines), + .VIDEO_ARX(ARX), + .VIDEO_ARY(ARY), - .LED_USER(led_user), - .LED_POWER(led_power), - .LED_DISK(led_disk), - .LED_MB(led_mb), +`ifdef MISTER_FB + .FB_EN(fb_en), + .FB_FORMAT(fb_fmt), + .FB_WIDTH(fb_width), + .FB_HEIGHT(fb_height), + .FB_BASE(fb_base), + .FB_STRIDE(fb_stride), + .FB_VBL(fb_vbl), + .FB_LL(lowlat), + .FB_FORCE_BLANK(fb_force_blank), - `ifndef LITE - .VIDEO_ARX(ARX), - .VIDEO_ARY(ARY), - `endif - - .AUDIO_L(audio_ls), - .AUDIO_R(audio_rs), - .AUDIO_S(audio_s), - .AUDIO_MIX(audio_mix), - //.TAPE_IN(0), - - // SCK -> CLK - // MOSI -> CMD - // MISO <- DAT0 - // Z -> DAT1 - // Z -> DAT2 - // CS -> DAT3 - .SD_SCK(SDIO_CLK), - .SD_MOSI(SDIO_CMD), - .SD_MISO(SDIO_DAT[0]), - .SD_CS(SDIO_DAT[3]), - .SD_CD(VGA_EN ? VGA_HS : SDIO_CD), - - - - .DDRAM_CLK(ram_clk), - .DDRAM_ADDR(ram_address), - .DDRAM_BURSTCNT(ram_burstcount), - .DDRAM_BUSY(ram_waitrequest), - .DDRAM_DOUT(ram_readdata), - .DDRAM_DOUT_READY(ram_readdatavalid), - .DDRAM_RD(ram_read), - .DDRAM_DIN(ram_writedata), - .DDRAM_BE(ram_byteenable), - .DDRAM_WE(ram_write) - -`ifndef LITE - , - .SDRAM_DQ(SDRAM_DQ), - .SDRAM_A(SDRAM_A), - .SDRAM_DQML(SDRAM_DQML), - .SDRAM_DQMH(SDRAM_DQMH), - .SDRAM_BA(SDRAM_BA), - .SDRAM_nCS(SDRAM_nCS), - .SDRAM_nWE(SDRAM_nWE), - .SDRAM_nRAS(SDRAM_nRAS), - .SDRAM_nCAS(SDRAM_nCAS), - .SDRAM_CLK(SDRAM_CLK), - .SDRAM_CKE(SDRAM_CKE) -`else - ,.UART_RX(UART_RX), - .UART_TX(UART_TX) +`ifdef MISTER_FB_PALETTE + .FB_PAL_CLK (fb_pal_clk), + .FB_PAL_ADDR(fb_pal_a), + .FB_PAL_DOUT(fb_pal_d), + .FB_PAL_DIN (fb_pal_q), + .FB_PAL_WR (fb_pal_wr), `endif - ); - endmodule +`endif - module sync_fix - ( - input clk, - - input sync_in, - output sync_out - ); + .LED_USER(led_user), + .LED_POWER(led_power), + .LED_DISK(led_disk), - assign sync_out = sync_in ^ pol; + .CLK_AUDIO(clk_audio), + .AUDIO_L(audio_l), + .AUDIO_R(audio_r), + .AUDIO_S(audio_s), + .AUDIO_MIX(audio_mix), - reg pol; - always @(posedge clk) begin - integer pos = 0, neg = 0, cnt = 0; - reg s1,s2; + .ADC_BUS({ADC_SCK,ADC_SDO,ADC_SDI,ADC_CONVST}), - s1 <= sync_in; - s2 <= s1; + .DDRAM_CLK(ram_clk), + .DDRAM_ADDR(ram_address), + .DDRAM_BURSTCNT(ram_burstcount), + .DDRAM_BUSY(ram_waitrequest), + .DDRAM_DOUT(ram_readdata), + .DDRAM_DOUT_READY(ram_readdatavalid), + .DDRAM_RD(ram_read), + .DDRAM_DIN(ram_writedata), + .DDRAM_BE(ram_byteenable), + .DDRAM_WE(ram_write), - if(~s2 & s1) neg <= cnt; - if(s2 & ~s1) pos <= cnt; + .SDRAM_DQ(SDRAM_DQ), + .SDRAM_A(SDRAM_A), + .SDRAM_DQML(SDRAM_DQML), + .SDRAM_DQMH(SDRAM_DQMH), + .SDRAM_BA(SDRAM_BA), + .SDRAM_nCS(SDRAM_nCS), + .SDRAM_nWE(SDRAM_nWE), + .SDRAM_nRAS(SDRAM_nRAS), + .SDRAM_nCAS(SDRAM_nCAS), + .SDRAM_CLK(SDRAM_CLK), + .SDRAM_CKE(SDRAM_CKE), - cnt <= cnt + 1; - if(s2 != s1) cnt <= 0; +`ifdef MISTER_DUAL_SDRAM + .SDRAM2_DQ(SDRAM2_DQ), + .SDRAM2_A(SDRAM2_A), + .SDRAM2_BA(SDRAM2_BA), + .SDRAM2_nCS(SDRAM2_nCS), + .SDRAM2_nWE(SDRAM2_nWE), + .SDRAM2_nRAS(SDRAM2_nRAS), + .SDRAM2_nCAS(SDRAM2_nCAS), + .SDRAM2_CLK(SDRAM2_CLK), + .SDRAM2_EN(SW[3]), +`endif - pol <= pos > neg; - end + .BUTTONS(btn), + .OSD_STATUS(osd_status), + + .SD_SCK(SD_CLK), + .SD_MOSI(SD_MOSI), + .SD_MISO(SD_MISO), + .SD_CS(SD_CS), +`ifdef MISTER_DUAL_SDRAM + .SD_CD(mcp_sdcd), +`else + .SD_CD(mcp_sdcd & (SW[0] ? VGA_HS : (SW[3] | SDCD_SPDIF))), +`endif + + .UART_CTS(uart_rts), + .UART_RTS(uart_cts), + .UART_RXD(uart_txd), + .UART_TXD(uart_rxd), + .UART_DTR(uart_dsr), + .UART_DSR(uart_dtr), + + .USER_OUT(user_out), + .USER_IN(user_in) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module sync_fix +( + input clk, + + input sync_in, + output sync_out +); + +assign sync_out = sync_in ^ pol; + +reg pol; +always @(posedge clk) begin + integer pos = 0, neg = 0, cnt = 0; + reg s1,s2; + + s1 <= sync_in; + s2 <= s1; + + if(~s2 & s1) neg <= cnt; + if(s2 & ~s1) pos <= cnt; + + cnt <= cnt + 1; + if(s2 != s1) cnt <= 0; + + pol <= pos > neg; +end + +endmodule + +///////////////////////////////////////////////////////////////////// + +// CSync generation +// Shifts HSync left by 1 HSync period during VSync + +module csync +( + input clk, + input hsync, + input vsync, + + output csync +); + +assign csync = (csync_vs ^ csync_hs); + +reg csync_hs, csync_vs; +always @(posedge clk) begin + reg prev_hs; + reg [15:0] h_cnt, line_len, hs_len; + + // Count line/Hsync length + h_cnt <= h_cnt + 1'd1; + + prev_hs <= hsync; + if (prev_hs ^ hsync) begin + h_cnt <= 0; + if (hsync) begin + line_len <= h_cnt - hs_len; + csync_hs <= 0; + end + else hs_len <= h_cnt; + end + + if (~vsync) csync_hs <= hsync; + else if(h_cnt == line_len) csync_hs <= 1; + + csync_vs <= vsync; +end endmodule diff --git a/sys/sysmem.sv b/sys/sysmem.sv index 886b9b3..8c17e86 100644 --- a/sys/sysmem.sv +++ b/sys/sysmem.sv @@ -1,204 +1,243 @@ `timescale 1 ps / 1 ps module sysmem_lite ( - input ramclk1_clk, // ramclk1.clk - input [28:0] ram1_address, // ram1.address - input [7:0] ram1_burstcount, // .burstcount - output ram1_waitrequest, // .waitrequest - output [63:0] ram1_readdata, // .readdata - output ram1_readdatavalid, // .readdatavalid - input ram1_read, // .read - input [63:0] ram1_writedata, // .writedata - input [7:0] ram1_byteenable, // .byteenable - input ram1_write, // .write + output clock, + output reset_out, - input ramclk2_clk, // ramclk2.clk - input [28:0] ram2_address, // ram2.address - input [7:0] ram2_burstcount, // .burstcount - output ram2_waitrequest, // .waitrequest - output [63:0] ram2_readdata, // .readdata - output ram2_readdatavalid, // .readdatavalid - input ram2_read, // .read - input [63:0] ram2_writedata, // .writedata - input [7:0] ram2_byteenable, // .byteenable - input ram2_write, // .write + input reset_hps_cold_req, + input reset_hps_warm_req, + input reset_core_req, - output ctl_clock, - input reset_cold_req, // reset.cold_req - output reset_reset, // .reset - input reset_reset_req, // .reset_req - input reset_warm_req, // .warm_req + input ram1_clk, + input [28:0] ram1_address, + input [7:0] ram1_burstcount, + output ram1_waitrequest, + output [63:0] ram1_readdata, + output ram1_readdatavalid, + input ram1_read, + input [63:0] ram1_writedata, + input [7:0] ram1_byteenable, + input ram1_write, - input vbuf_clk, // vbuf.clk - input [27:0] vbuf_address, // vbuf.address - input [7:0] vbuf_burstcount, // .burstcount - output vbuf_waitrequest, // .waitrequest - output [127:0] vbuf_readdata, // .readdata - output vbuf_readdatavalid, // .readdatavalid - input vbuf_read, // .read - input [127:0] vbuf_writedata, // .writedata - input [15:0] vbuf_byteenable, // .byteenable - input vbuf_write // .write + input ram2_clk, + input [28:0] ram2_address, + input [7:0] ram2_burstcount, + output ram2_waitrequest, + output [63:0] ram2_readdata, + output ram2_readdatavalid, + input ram2_read, + input [63:0] ram2_writedata, + input [7:0] ram2_byteenable, + input ram2_write, + + input vbuf_clk, + input [27:0] vbuf_address, + input [7:0] vbuf_burstcount, + output vbuf_waitrequest, + output [127:0] vbuf_readdata, + output vbuf_readdatavalid, + input vbuf_read, + input [127:0] vbuf_writedata, + input [15:0] vbuf_byteenable, + input vbuf_write ); -assign ctl_clock = clk_vip_clk; +assign reset_out = ~init_reset_n | ~hps_h2f_reset_n | reset_core_req; -wire hps_h2f_reset_reset; // HPS:h2f_rst_n -> Reset_Source:reset_hps -wire reset_source_reset_cold_reset; // Reset_Source:reset_cold -> HPS:f2h_cold_rst_req_n -wire reset_source_reset_warm_reset; // Reset_Source:reset_warm -> HPS:f2h_warm_rst_req_n -wire clk_vip_clk; +//////////////////////////////////////////////////////// +//// f2sdram_safe_terminator_ram1 //// +//////////////////////////////////////////////////////// +wire [28:0] f2h_ram1_address; +wire [7:0] f2h_ram1_burstcount; +wire f2h_ram1_waitrequest; +wire [63:0] f2h_ram1_readdata; +wire f2h_ram1_readdatavalid; +wire f2h_ram1_read; +wire [63:0] f2h_ram1_writedata; +wire [7:0] f2h_ram1_byteenable; +wire f2h_ram1_write; -sysmem_HPS_fpga_interfaces fpga_interfaces ( - .f2h_cold_rst_req_n (~reset_source_reset_cold_reset), // f2h_cold_reset_req.reset_n - .f2h_warm_rst_req_n (~reset_source_reset_warm_reset), // f2h_warm_reset_req.reset_n - .h2f_user0_clk (clk_vip_clk), // h2f_user0_clock.clk - .h2f_rst_n (hps_h2f_reset_reset), // h2f_reset.reset_n - .f2h_sdram0_clk (vbuf_clk), // f2h_sdram0_clock.clk - .f2h_sdram0_ADDRESS (vbuf_address), // f2h_sdram0_data.address - .f2h_sdram0_BURSTCOUNT (vbuf_burstcount), // .burstcount - .f2h_sdram0_WAITREQUEST (vbuf_waitrequest), // .waitrequest - .f2h_sdram0_READDATA (vbuf_readdata), // .readdata - .f2h_sdram0_READDATAVALID (vbuf_readdatavalid), // .readdatavalid - .f2h_sdram0_READ (vbuf_read), // .read - .f2h_sdram0_WRITEDATA (vbuf_writedata), // .writedata - .f2h_sdram0_BYTEENABLE (vbuf_byteenable), // .byteenable - .f2h_sdram0_WRITE (vbuf_write), // .write - .f2h_sdram1_clk (ramclk1_clk), // f2h_sdram1_clock.clk - .f2h_sdram1_ADDRESS (ram1_address), // f2h_sdram1_data.address - .f2h_sdram1_BURSTCOUNT (ram1_burstcount), // .burstcount - .f2h_sdram1_WAITREQUEST (ram1_waitrequest), // .waitrequest - .f2h_sdram1_READDATA (ram1_readdata), // .readdata - .f2h_sdram1_READDATAVALID (ram1_readdatavalid), // .readdatavalid - .f2h_sdram1_READ (ram1_read), // .read - .f2h_sdram1_WRITEDATA (ram1_writedata), // .writedata - .f2h_sdram1_BYTEENABLE (ram1_byteenable), // .byteenable - .f2h_sdram1_WRITE (ram1_write), // .write - .f2h_sdram2_clk (ramclk2_clk), // f2h_sdram2_clock.clk - .f2h_sdram2_ADDRESS (ram2_address), // f2h_sdram2_data.address - .f2h_sdram2_BURSTCOUNT (ram2_burstcount), // .burstcount - .f2h_sdram2_WAITREQUEST (ram2_waitrequest), // .waitrequest - .f2h_sdram2_READDATA (ram2_readdata), // .readdata - .f2h_sdram2_READDATAVALID (ram2_readdatavalid), // .readdatavalid - .f2h_sdram2_READ (ram2_read), // .read - .f2h_sdram2_WRITEDATA (ram2_writedata), // .writedata - .f2h_sdram2_BYTEENABLE (ram2_byteenable), // .byteenable - .f2h_sdram2_WRITE (ram2_write) // .write -); +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg ram1_reset_0 = 1'b1; +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg ram1_reset_1 = 1'b1; +always @(posedge ram1_clk) begin + ram1_reset_0 <= reset_out; + ram1_reset_1 <= ram1_reset_0; +end -reset_source reset_source ( - .clk (clk_vip_clk), // clock.clk - .reset_hps (~hps_h2f_reset_reset), // reset_hps.reset - .reset_sys (), // reset_sys.reset - .cold_req (reset_cold_req), // reset_ctl.cold_req - .reset (reset_reset), // .reset - .reset_req (reset_reset_req), // .reset_req - .reset_vip (0), // .reset_vip - .warm_req (reset_warm_req), // .warm_req - .reset_warm (reset_source_reset_warm_reset), // reset_warm.reset - .reset_cold (reset_source_reset_cold_reset) // reset_cold.reset -); - -endmodule - -`timescale 1 ps / 1 ps -module sysmem +f2sdram_safe_terminator #(64, 8) f2sdram_safe_terminator_ram1 ( - input ramclk1_clk, // ramclk1.clk - input [28:0] ram1_address, // ram1.address - input [7:0] ram1_burstcount, // .burstcount - output ram1_waitrequest, // .waitrequest - output [63:0] ram1_readdata, // .readdata - output ram1_readdatavalid, // .readdatavalid - input ram1_read, // .read - input [63:0] ram1_writedata, // .writedata - input [7:0] ram1_byteenable, // .byteenable - input ram1_write, // .write + .clk (ram1_clk), + .rst_req_sync (ram1_reset_1), - input ramclk2_clk, // ramclk2.clk - input [28:0] ram2_address, // ram2.address - input [7:0] ram2_burstcount, // .burstcount - output ram2_waitrequest, // .waitrequest - output [63:0] ram2_readdata, // .readdata - output ram2_readdatavalid, // .readdatavalid - input ram2_read, // .read - input [63:0] ram2_writedata, // .writedata - input [7:0] ram2_byteenable, // .byteenable - input ram2_write, // .write + .waitrequest_slave (ram1_waitrequest), + .burstcount_slave (ram1_burstcount), + .address_slave (ram1_address), + .readdata_slave (ram1_readdata), + .readdatavalid_slave (ram1_readdatavalid), + .read_slave (ram1_read), + .writedata_slave (ram1_writedata), + .byteenable_slave (ram1_byteenable), + .write_slave (ram1_write), - input reset_cold_req, // reset.cold_req - output reset_reset, // .reset - input reset_reset_req, // .reset_req - input reset_warm_req, // .warm_req - - input [27:0] ram_vip_address, // ram_vip.address - input [7:0] ram_vip_burstcount, // .burstcount - output ram_vip_waitrequest, // .waitrequest - output [127:0] ram_vip_readdata, // .readdata - output ram_vip_readdatavalid, // .readdatavalid - input ram_vip_read, // .read - input [127:0] ram_vip_writedata, // .writedata - input [15:0] ram_vip_byteenable, // .byteenable - input ram_vip_write, // .write - - output clk_vip_clk, // clk_vip.clk - output reset_vip_reset // reset_vip.reset + .waitrequest_master (f2h_ram1_waitrequest), + .burstcount_master (f2h_ram1_burstcount), + .address_master (f2h_ram1_address), + .readdata_master (f2h_ram1_readdata), + .readdatavalid_master (f2h_ram1_readdatavalid), + .read_master (f2h_ram1_read), + .writedata_master (f2h_ram1_writedata), + .byteenable_master (f2h_ram1_byteenable), + .write_master (f2h_ram1_write) ); -wire hps_h2f_reset_reset; // HPS:h2f_rst_n -> Reset_Source:reset_hps -wire reset_source_reset_cold_reset; // Reset_Source:reset_cold -> HPS:f2h_cold_rst_req_n -wire reset_source_reset_warm_reset; // Reset_Source:reset_warm -> HPS:f2h_warm_rst_req_n +//////////////////////////////////////////////////////// +//// f2sdram_safe_terminator_ram2 //// +//////////////////////////////////////////////////////// +wire [28:0] f2h_ram2_address; +wire [7:0] f2h_ram2_burstcount; +wire f2h_ram2_waitrequest; +wire [63:0] f2h_ram2_readdata; +wire f2h_ram2_readdatavalid; +wire f2h_ram2_read; +wire [63:0] f2h_ram2_writedata; +wire [7:0] f2h_ram2_byteenable; +wire f2h_ram2_write; +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg ram2_reset_0 = 1'b1; +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg ram2_reset_1 = 1'b1; +always @(posedge ram2_clk) begin + ram2_reset_0 <= reset_out; + ram2_reset_1 <= ram2_reset_0; +end + +f2sdram_safe_terminator #(64, 8) f2sdram_safe_terminator_ram2 +( + .clk (ram2_clk), + .rst_req_sync (ram2_reset_1), + + .waitrequest_slave (ram2_waitrequest), + .burstcount_slave (ram2_burstcount), + .address_slave (ram2_address), + .readdata_slave (ram2_readdata), + .readdatavalid_slave (ram2_readdatavalid), + .read_slave (ram2_read), + .writedata_slave (ram2_writedata), + .byteenable_slave (ram2_byteenable), + .write_slave (ram2_write), + + .waitrequest_master (f2h_ram2_waitrequest), + .burstcount_master (f2h_ram2_burstcount), + .address_master (f2h_ram2_address), + .readdata_master (f2h_ram2_readdata), + .readdatavalid_master (f2h_ram2_readdatavalid), + .read_master (f2h_ram2_read), + .writedata_master (f2h_ram2_writedata), + .byteenable_master (f2h_ram2_byteenable), + .write_master (f2h_ram2_write) +); + +//////////////////////////////////////////////////////// +//// f2sdram_safe_terminator_vbuf //// +//////////////////////////////////////////////////////// +wire [27:0] f2h_vbuf_address; +wire [7:0] f2h_vbuf_burstcount; +wire f2h_vbuf_waitrequest; +wire [127:0] f2h_vbuf_readdata; +wire f2h_vbuf_readdatavalid; +wire f2h_vbuf_read; +wire [127:0] f2h_vbuf_writedata; +wire [15:0] f2h_vbuf_byteenable; +wire f2h_vbuf_write; + +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg vbuf_reset_0 = 1'b1; +(* altera_attribute = {"-name SYNCHRONIZER_IDENTIFICATION FORCED_IF_ASYNCHRONOUS"} *) reg vbuf_reset_1 = 1'b1; +always @(posedge vbuf_clk) begin + vbuf_reset_0 <= reset_out; + vbuf_reset_1 <= vbuf_reset_0; +end + +f2sdram_safe_terminator #(128, 8) f2sdram_safe_terminator_vbuf +( + .clk (vbuf_clk), + .rst_req_sync (vbuf_reset_1), + + .waitrequest_slave (vbuf_waitrequest), + .burstcount_slave (vbuf_burstcount), + .address_slave (vbuf_address), + .readdata_slave (vbuf_readdata), + .readdatavalid_slave (vbuf_readdatavalid), + .read_slave (vbuf_read), + .writedata_slave (vbuf_writedata), + .byteenable_slave (vbuf_byteenable), + .write_slave (vbuf_write), + + .waitrequest_master (f2h_vbuf_waitrequest), + .burstcount_master (f2h_vbuf_burstcount), + .address_master (f2h_vbuf_address), + .readdata_master (f2h_vbuf_readdata), + .readdatavalid_master (f2h_vbuf_readdatavalid), + .read_master (f2h_vbuf_read), + .writedata_master (f2h_vbuf_writedata), + .byteenable_master (f2h_vbuf_byteenable), + .write_master (f2h_vbuf_write) +); + +//////////////////////////////////////////////////////// +//// HPS <> FPGA interfaces //// +//////////////////////////////////////////////////////// sysmem_HPS_fpga_interfaces fpga_interfaces ( - .f2h_cold_rst_req_n (~reset_source_reset_cold_reset), // f2h_cold_reset_req.reset_n - .f2h_warm_rst_req_n (~reset_source_reset_warm_reset), // f2h_warm_reset_req.reset_n - .h2f_user0_clk (clk_vip_clk), // h2f_user0_clock.clk - .h2f_rst_n (hps_h2f_reset_reset), // h2f_reset.reset_n - .f2h_sdram0_clk (clk_vip_clk), // f2h_sdram0_clock.clk - .f2h_sdram0_ADDRESS (ram_vip_address), // f2h_sdram0_data.address - .f2h_sdram0_BURSTCOUNT (ram_vip_burstcount), // .burstcount - .f2h_sdram0_WAITREQUEST (ram_vip_waitrequest), // .waitrequest - .f2h_sdram0_READDATA (ram_vip_readdata), // .readdata - .f2h_sdram0_READDATAVALID (ram_vip_readdatavalid), // .readdatavalid - .f2h_sdram0_READ (ram_vip_read), // .read - .f2h_sdram0_WRITEDATA (ram_vip_writedata), // .writedata - .f2h_sdram0_BYTEENABLE (ram_vip_byteenable), // .byteenable - .f2h_sdram0_WRITE (ram_vip_write), // .write - .f2h_sdram1_clk (ramclk1_clk), // f2h_sdram1_clock.clk - .f2h_sdram1_ADDRESS (ram1_address), // f2h_sdram1_data.address - .f2h_sdram1_BURSTCOUNT (ram1_burstcount), // .burstcount - .f2h_sdram1_WAITREQUEST (ram1_waitrequest), // .waitrequest - .f2h_sdram1_READDATA (ram1_readdata), // .readdata - .f2h_sdram1_READDATAVALID (ram1_readdatavalid), // .readdatavalid - .f2h_sdram1_READ (ram1_read), // .read - .f2h_sdram1_WRITEDATA (ram1_writedata), // .writedata - .f2h_sdram1_BYTEENABLE (ram1_byteenable), // .byteenable - .f2h_sdram1_WRITE (ram1_write), // .write - .f2h_sdram2_clk (ramclk2_clk), // f2h_sdram2_clock.clk - .f2h_sdram2_ADDRESS (ram2_address), // f2h_sdram2_data.address - .f2h_sdram2_BURSTCOUNT (ram2_burstcount), // .burstcount - .f2h_sdram2_WAITREQUEST (ram2_waitrequest), // .waitrequest - .f2h_sdram2_READDATA (ram2_readdata), // .readdata - .f2h_sdram2_READDATAVALID (ram2_readdatavalid), // .readdatavalid - .f2h_sdram2_READ (ram2_read), // .read - .f2h_sdram2_WRITEDATA (ram2_writedata), // .writedata - .f2h_sdram2_BYTEENABLE (ram2_byteenable), // .byteenable - .f2h_sdram2_WRITE (ram2_write) // .write + .f2h_cold_rst_req_n (~reset_hps_cold_req), + .f2h_warm_rst_req_n (~reset_hps_warm_req), + .h2f_user0_clk (clock), + .h2f_rst_n (hps_h2f_reset_n), + .f2h_sdram0_clk (vbuf_clk), + .f2h_sdram0_ADDRESS (f2h_vbuf_address), + .f2h_sdram0_BURSTCOUNT (f2h_vbuf_burstcount), + .f2h_sdram0_WAITREQUEST (f2h_vbuf_waitrequest), + .f2h_sdram0_READDATA (f2h_vbuf_readdata), + .f2h_sdram0_READDATAVALID (f2h_vbuf_readdatavalid), + .f2h_sdram0_READ (f2h_vbuf_read), + .f2h_sdram0_WRITEDATA (f2h_vbuf_writedata), + .f2h_sdram0_BYTEENABLE (f2h_vbuf_byteenable), + .f2h_sdram0_WRITE (f2h_vbuf_write), + .f2h_sdram1_clk (ram1_clk), + .f2h_sdram1_ADDRESS (f2h_ram1_address), + .f2h_sdram1_BURSTCOUNT (f2h_ram1_burstcount), + .f2h_sdram1_WAITREQUEST (f2h_ram1_waitrequest), + .f2h_sdram1_READDATA (f2h_ram1_readdata), + .f2h_sdram1_READDATAVALID (f2h_ram1_readdatavalid), + .f2h_sdram1_READ (f2h_ram1_read), + .f2h_sdram1_WRITEDATA (f2h_ram1_writedata), + .f2h_sdram1_BYTEENABLE (f2h_ram1_byteenable), + .f2h_sdram1_WRITE (f2h_ram1_write), + .f2h_sdram2_clk (ram2_clk), + .f2h_sdram2_ADDRESS (f2h_ram2_address), + .f2h_sdram2_BURSTCOUNT (f2h_ram2_burstcount), + .f2h_sdram2_WAITREQUEST (f2h_ram2_waitrequest), + .f2h_sdram2_READDATA (f2h_ram2_readdata), + .f2h_sdram2_READDATAVALID (f2h_ram2_readdatavalid), + .f2h_sdram2_READ (f2h_ram2_read), + .f2h_sdram2_WRITEDATA (f2h_ram2_writedata), + .f2h_sdram2_BYTEENABLE (f2h_ram2_byteenable), + .f2h_sdram2_WRITE (f2h_ram2_write) ); -reset_source reset_source ( - .clk (clk_vip_clk), // clock.clk - .reset_hps (~hps_h2f_reset_reset), // reset_hps.reset - .reset_sys (reset_vip_reset), // reset_sys.reset - .cold_req (reset_cold_req), // reset_ctl.cold_req - .reset (reset_reset), // .reset - .reset_req (reset_reset_req), // .reset_req - .warm_req (reset_warm_req), // .warm_req - .reset_warm (reset_source_reset_warm_reset), // reset_warm.reset - .reset_cold (reset_source_reset_cold_reset) // reset_cold.reset -); +wire hps_h2f_reset_n; + +reg init_reset_n = 0; +always @(posedge clock) begin + integer timeout = 0; + + if(timeout < 2000000) begin + init_reset_n <= 0; + timeout <= timeout + 1; + end + else init_reset_n <= 1; +end endmodule + module sysmem_HPS_fpga_interfaces ( // h2f_reset diff --git a/sys/vga_out.sv b/sys/vga_out.sv index e316000..fe8172b 100644 --- a/sys/vga_out.sv +++ b/sys/vga_out.sv @@ -1,44 +1,20 @@ module vga_out ( - input ypbpr_full, + input clk, input ypbpr_en, - input [23:0] din, - output [23:0] dout -); + input hsync, + input vsync, + input csync, -wire [5:0] yuv_full[225] = '{ - 6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1, - 6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4, - 6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6, - 6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8, - 6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11, - 6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13, - 6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15, - 6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17, - 6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20, - 6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22, - 6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24, - 6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27, - 6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29, - 6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31, - 6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33, - 6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36, - 6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38, - 6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40, - 6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42, - 6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45, - 6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47, - 6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49, - 6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52, - 6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54, - 6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56, - 6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58, - 6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61, - 6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63, - 6'd63 -}; + input [23:0] din, + output [23:0] dout, + + output reg hsync_o, + output reg vsync_o, + output reg csync_o +); wire [5:0] red = din[23:18]; wire [5:0] green = din[15:10]; @@ -49,17 +25,44 @@ wire [5:0] blue = din[7:2]; // Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B) // Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B) -wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}); -wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}); -wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0}); +reg [7:0] y, pb, pr; +reg [23:0] rgb; +always @(posedge clk) begin + reg [18:0] y_1r, pb_1r, pr_1r; + reg [18:0] y_1g, pb_1g, pr_1g; + reg [18:0] y_1b, pb_1b, pr_1b; + reg [18:0] y_2, pb_2, pr_2; + reg [23:0] din1, din2; + reg hsync2, vsync2, csync2; + reg hsync1, vsync1, csync1; -wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8]; -wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8]; -wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8]; + y_1r <= 19'd04096 + ({red, 8'd0} + {red, 3'd0}); + pb_1r <= 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}); + pr_1r <= 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}); -assign dout[23:16] = ypbpr_en ? {(ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]), 2'b00} : din[23:16]; -assign dout[15:8] = ypbpr_en ? {(ypbpr_full ? yuv_full[y -8'd16] : y[7:2]), 2'b00} : din[15:8]; -assign dout[7:0] = ypbpr_en ? {(ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]), 2'b00} : din[7:0]; + y_1g <= {green, 9'd0} + {green, 2'd0}; + pb_1g <= {green, 8'd0} + {green, 5'd0} + {green, 3'd0}; + pr_1g <= {green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}; + y_1b <= {blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}; + pb_1b <= {blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}; + pr_1b <= {blue, 6'd0} + {blue, 3'd0}; + + y_2 <= y_1r + y_1g + y_1b; + pb_2 <= pb_1r - pb_1g + pb_1b; + pr_2 <= pr_1r - pr_1g - pr_1b; + + y <= ( y_2[18] || !y_2[17:12]) ? 8'd16 : (y_2[17:8] > 235) ? 8'd235 : y_2[15:8]; + pb <= (pb_2[18] || !pb_2[17:12]) ? 8'd16 : (&pb_2[17:12]) ? 8'd240 : pb_2[15:8]; + pr <= (pr_2[18] || !pr_2[17:12]) ? 8'd16 : (&pr_2[17:12]) ? 8'd240 : pr_2[15:8]; + + hsync_o <= hsync2; hsync2 <= hsync1; hsync1 <= hsync; + vsync_o <= vsync2; vsync2 <= vsync1; vsync1 <= vsync; + csync_o <= csync2; csync2 <= csync1; csync1 <= csync; + + rgb <= din2; din2 <= din1; din1 <= din; +end + +assign dout = ypbpr_en ? {pr, y, pb} : rgb; endmodule diff --git a/sys/video_cleaner.sv b/sys/video_cleaner.sv index 36227ba..a99894c 100644 --- a/sys/video_cleaner.sv +++ b/sys/video_cleaner.sv @@ -23,6 +23,9 @@ module video_cleaner input HBlank, input VBlank, + //optional de + input DE_in, + // video output signals output reg [7:0] VGA_R, output reg [7:0] VGA_G, @@ -33,7 +36,10 @@ module video_cleaner // optional aligned blank output reg HBlank_out, - output reg VBlank_out + output reg VBlank_out, + + // optional aligned de + output reg DE_out ); wire hs, vs; @@ -49,11 +55,13 @@ always @(posedge clk_vid) begin if(ce_pix) begin HBlank_out <= hbl; - VGA_VS <= vs; VGA_HS <= hs; + if(~VGA_HS & hs) VGA_VS <= vs; + VGA_R <= R; VGA_G <= G; VGA_B <= B; + DE_out <= DE_in; if(HBlank_out & ~hbl) VBlank_out <= vbl; end diff --git a/sys/video_freak.sv b/sys/video_freak.sv new file mode 100644 index 0000000..d542ae7 --- /dev/null +++ b/sys/video_freak.sv @@ -0,0 +1,278 @@ +// +// +// Video crop +// Copyright (c) 2020 Grabulosaure, (c) 2021 Alexey Melnikov +// +// Integer scaling +// Copyright (c) 2021 Alexey Melnikov +// +// This program is GPL Licensed. See COPYING for the full license. +// +// +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +`timescale 1ns / 1ps + +module video_freak +( + input CLK_VIDEO, + input CE_PIXEL, + input VGA_VS, + input [11:0] HDMI_WIDTH, + input [11:0] HDMI_HEIGHT, + output VGA_DE, + output reg [12:0] VIDEO_ARX, + output reg [12:0] VIDEO_ARY, + + input VGA_DE_IN, + input [11:0] ARX, + input [11:0] ARY, + input [11:0] CROP_SIZE, + input [4:0] CROP_OFF, // -16...+15 + input [2:0] SCALE //0 - normal, 1 - V-integer, 2 - HV-Integer-, 3 - HV-Integer+, 4 - HV-Integer +); + +reg mul_start; +wire mul_run; +reg [11:0] mul_arg1, mul_arg2; +wire [23:0] mul_res; +sys_umul #(12,12) mul(CLK_VIDEO,mul_start,mul_run, mul_arg1,mul_arg2,mul_res); + +reg vde; +reg [11:0] arxo,aryo; +reg [11:0] vsize; +reg [11:0] hsize; + +always @(posedge CLK_VIDEO) begin + reg old_de, old_vs,ovde; + reg [11:0] vtot,vcpt,vcrop,voff; + reg [11:0] hcpt; + reg [11:0] vadj; + reg [23:0] ARXG,ARYG; + reg [11:0] arx,ary; + reg [1:0] vcalc; + + if (CE_PIXEL) begin + old_de <= VGA_DE_IN; + old_vs <= VGA_VS; + if (VGA_VS & ~old_vs) begin + vcpt <= 0; + vtot <= vcpt; + vcalc <= 1; + vcrop <= (CROP_SIZE >= vcpt) ? 12'd0 : CROP_SIZE; + end + + if (VGA_DE_IN) hcpt <= hcpt + 1'd1; + if (~VGA_DE_IN & old_de) begin + vcpt <= vcpt + 1'd1; + if(!vcpt) hsize <= hcpt; + hcpt <= 0; + end + end + + arx <= ARX; + ary <= ARY; + + vsize <= vcrop ? vcrop : vtot; + + mul_start <= 0; + + if(!vcrop || !ary || !arx) begin + arxo <= arx; + aryo <= ary; + end + else if (vcalc) begin + if(~mul_start & ~mul_run) begin + vcalc <= vcalc + 1'd1; + case(vcalc) + 1: begin + mul_arg1 <= arx; + mul_arg2 <= vtot; + mul_start <= 1; + end + + 2: begin + ARXG <= mul_res; + mul_arg1 <= ary; + mul_arg2 <= vcrop; + mul_start <= 1; + end + + 3: begin + ARYG <= mul_res; + end + endcase + end + end + else if (ARXG[23] | ARYG[23]) begin + arxo <= ARXG[23:12]; + aryo <= ARYG[23:12]; + end + else begin + ARXG <= ARXG << 1; + ARYG <= ARYG << 1; + end + + vadj <= (vtot-vcrop) + {{6{CROP_OFF[4]}},CROP_OFF,1'b0}; + voff <= vadj[11] ? 12'd0 : ((vadj[11:1] + vcrop) > vtot) ? vtot-vcrop : vadj[11:1]; + ovde <= ((vcpt >= voff) && (vcpt < (vcrop + voff))) || !vcrop; + vde <= ovde; +end + +assign VGA_DE = vde & VGA_DE_IN; + +video_scale_int scale +( + .CLK_VIDEO(CLK_VIDEO), + .HDMI_WIDTH(HDMI_WIDTH), + .HDMI_HEIGHT(HDMI_HEIGHT), + .SCALE(SCALE), + .hsize(hsize), + .vsize(vsize), + .arx_i(arxo), + .ary_i(aryo), + .arx_o(VIDEO_ARX), + .ary_o(VIDEO_ARY) +); + +endmodule + + +module video_scale_int +( + input CLK_VIDEO, + + input [11:0] HDMI_WIDTH, + input [11:0] HDMI_HEIGHT, + + input [2:0] SCALE, + + input [11:0] hsize, + input [11:0] vsize, + + input [11:0] arx_i, + input [11:0] ary_i, + + output reg [12:0] arx_o, + output reg [12:0] ary_o +); + +reg div_start; +wire div_run; +reg [23:0] div_num; +reg [11:0] div_den; +wire [23:0] div_res; +sys_udiv #(24,12) div(CLK_VIDEO,div_start,div_run, div_num,div_den,div_res); + +reg mul_start; +wire mul_run; +reg [11:0] mul_arg1, mul_arg2; +wire [23:0] mul_res; +sys_umul #(12,12) mul(CLK_VIDEO,mul_start,mul_run, mul_arg1,mul_arg2,mul_res); + +wire [11:0] wideres = mul_res[11:0] + hsize; + +always @(posedge CLK_VIDEO) begin + reg [11:0] oheight,wres; + reg [12:0] arxf,aryf; + reg [3:0] cnt; + reg narrow; + + div_start <= 0; + mul_start <= 0; + + if (!SCALE || (!ary_i && arx_i)) begin + arxf <= arx_i; + aryf <= ary_i; + end + else if(~div_start & ~div_run & ~mul_start & ~mul_run) begin + cnt <= cnt + 1'd1; + case(cnt) + 0: begin + div_num <= HDMI_HEIGHT; + div_den <= vsize; + div_start <= 1; + end + + 1: if(!div_res[11:0]) begin + // screen resolution is lower than video resolution. + // Integer scaling is impossible. + arxf <= arx_i; + aryf <= ary_i; + cnt <= 0; + end + else begin + mul_arg1 <= vsize; + mul_arg2 <= div_res[11:0]; + mul_start <= 1; + end + + 2: begin + oheight <= mul_res[11:0]; + if(!ary_i) begin + cnt <= 8; + end + end + + 3: begin + mul_arg1 <= mul_res[11:0]; + mul_arg2 <= arx_i; + mul_start <= 1; + end + + 4: begin + div_num <= mul_res; + div_den <= ary_i; + div_start <= 1; + end + + 5: begin + div_num <= div_res; + div_den <= hsize; + div_start <= 1; + end + + 6: begin + mul_arg1 <= hsize; + mul_arg2 <= div_res[11:0] ? div_res[11:0] : 12'd1; + mul_start <= 1; + end + + 7: if(mul_res <= HDMI_WIDTH) begin + cnt <= 10; + end + + 8: begin + div_num <= HDMI_WIDTH; + div_den <= hsize; + div_start <= 1; + end + + 9: begin + mul_arg1 <= hsize; + mul_arg2 <= div_res[11:0] ? div_res[11:0] : 12'd1; + mul_start <= 1; + end + + 10: begin + narrow <= ((div_num[11:0] - mul_res[11:0]) <= (wideres - div_num[11:0])) || (wideres > HDMI_WIDTH); + wres <= wideres; + end + + 11: begin + case(SCALE) + 2: arxf <= {1'b1, mul_res[11:0]}; + 3: arxf <= {1'b1, (wres > HDMI_WIDTH) ? mul_res[11:0] : wres}; + 4: arxf <= {1'b1, narrow ? mul_res[11:0] : wres}; + default: arxf <= {1'b1, div_num[11:0]}; + endcase + aryf <= {1'b1, oheight}; + end + endcase + end + + arx_o <= arxf; + ary_o <= aryf; +end + +endmodule diff --git a/sys/video_freezer.sv b/sys/video_freezer.sv new file mode 100644 index 0000000..cfbdf22 --- /dev/null +++ b/sys/video_freezer.sv @@ -0,0 +1,143 @@ +// +// video freeze with sync +// (C) Alexey Melnikov +// +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +module video_freezer +( + input clk, + + output sync, + input freeze, + + input hs_in, + input vs_in, + input hbl_in, + input vbl_in, + + output hs_out, + output vs_out, + output hbl_out, + output vbl_out +); + +sync_lock #(33) vs_lock +( + .clk(clk), + .sync_in(vs_in), + .sync_out(vs_out), + .de_in(vbl_in), + .de_out(vbl_out), + .freeze(freeze) +); + +wire sync_pt; +sync_lock #(21) hs_lock +( + .clk(clk), + .sync_in(hs_in), + .sync_out(hs_out), + .de_in(hbl_in), + .de_out(hbl_out), + .freeze(freeze), + .sync_pt(sync_pt) +); + +reg sync_o; +always @(posedge clk) begin + reg old_hs, old_vs; + reg vs_sync; + + old_vs <= vs_out; + + if(~old_vs & vs_out) vs_sync <= 1; + if(sync_pt & vs_sync) begin + vs_sync <= 0; + sync_o <= ~sync_o; + end +end + +assign sync = sync_o; + +endmodule + + +module sync_lock #(parameter WIDTH) +( + input clk, + + input sync_in, + input de_in, + + output sync_out, + output de_out, + + input freeze, + output sync_pt, + output valid +); + +reg [WIDTH-1:0] f_len, s_len, de_start, de_end; +reg sync_valid; + +reg old_sync; +always @(posedge clk) old_sync <= sync_in; + +always @(posedge clk) begin + reg [WIDTH-1:0] cnti; + reg f_valid; + reg old_de; + + cnti <= cnti + 1'd1; + if(~old_sync & sync_in) begin + if(sync_valid) f_len <= cnti; + f_valid <= 1; + sync_valid <= f_valid; + cnti <= 0; + end + + if(old_sync & ~sync_in & sync_valid) s_len <= cnti; + + old_de <= de_in; + if(~old_de & de_in & sync_valid) de_start <= cnti; + if(old_de & ~de_in & sync_valid) de_end <= cnti; + + if(freeze) {f_valid, sync_valid} <= 0; +end + +reg sync_o, de_o, sync_o_pre; +always @(posedge clk) begin + reg [WIDTH-1:0] cnto; + + cnto <= cnto + 1'd1; + if(old_sync & ~sync_in & sync_valid) cnto <= s_len + 2'd2; + if(cnto == f_len) cnto <= 0; + + sync_o_pre <= (cnto == (s_len>>1)); // middle in sync + if(cnto == f_len) sync_o <= 1; + if(cnto == s_len) sync_o <= 0; + if(cnto == de_start) de_o <= 1; + if(cnto == de_end) de_o <= 0; +end + +assign sync_out = freeze ? sync_o : sync_in; +assign valid = sync_valid; +assign sync_pt = sync_o_pre; +assign de_out = freeze ? de_o : de_in; + +endmodule diff --git a/sys/video_mixer.sv b/sys/video_mixer.sv index c9d358d..fd0b08f 100644 --- a/sys/video_mixer.sv +++ b/sys/video_mixer.sv @@ -1,6 +1,6 @@ // // -// Copyright (c) 2017 Sorgelig +// Copyright (c) 2017,2021 Alexey Melnikov // // This program is GPL Licensed. See COPYING for the full license. // @@ -10,50 +10,46 @@ `timescale 1ns / 1ps // -// LINE_LENGTH: Length of display line in pixels -// Usually it's length from HSync to HSync. -// May be less if line_start is used. -// +// LINE_LENGTH: Length of display line in pixels when HBlank = 0; // HALF_DEPTH: If =1 then color dept is 4 bits per component -// For half depth 8 bits monochrome is available with -// mono signal enabled and color = {G, R} +// +// altera message_off 10720 +// altera message_off 12161 module video_mixer #( parameter LINE_LENGTH = 768, - parameter HALF_DEPTH = 0 + parameter HALF_DEPTH = 0, + parameter GAMMA = 0 ) ( - // master clock - // it should be multiple by (ce_pix*4). - input clk_sys, - - // Pixel clock or clock_enable (both are accepted). - input ce_pix, - output ce_pix_out, + input CLK_VIDEO, // should be multiple by (ce_pix*4) + output reg CE_PIXEL, // output pixel clock enable + + input ce_pix, // input pixel clock or clock_enable input scandoubler, + input hq2x, // high quality 2x scaling - // scanlines (00-none 01-25% 10-50% 11-75%) - input [1:0] scanlines, - - // High quality 2x scaling - input hq2x, + inout [21:0] gamma_bus, // color input [DWIDTH:0] R, input [DWIDTH:0] G, input [DWIDTH:0] B, - // Monochrome mode (for HALF_DEPTH only) - input mono, - // Positive pulses. input HSync, input VSync, input HBlank, input VBlank, + // Freeze engine + // HDMI: displays last frame + // VGA: black screen with HSync and VSync + input HDMI_FREEZE, + output freeze_sync, + // video output signals output reg [7:0] VGA_R, output reg [7:0] VGA_G, @@ -64,22 +60,100 @@ module video_mixer ); localparam DWIDTH = HALF_DEPTH ? 3 : 7; +localparam DWIDTH_SD = GAMMA ? 7 : DWIDTH; +localparam HALF_DEPTH_SD = GAMMA ? 0 : HALF_DEPTH; -wire [DWIDTH:0] R_sd; -wire [DWIDTH:0] G_sd; -wire [DWIDTH:0] B_sd; -wire hs_sd, vs_sd, hb_sd, vb_sd, ce_pix_sd; - -scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) sd +wire frz_hs, frz_vs; +wire frz_hbl, frz_vbl; +video_freezer freezer ( - .*, + .clk(CLK_VIDEO), + .freeze(HDMI_FREEZE), .hs_in(HSync), .vs_in(VSync), - .hb_in(HBlank), - .vb_in(VBlank), - .r_in(R), - .g_in(G), - .b_in(B), + .hbl_in(HBlank), + .vbl_in(VBlank), + .sync(freeze_sync), + .hs_out(frz_hs), + .vs_out(frz_vs), + .hbl_out(frz_hbl), + .vbl_out(frz_vbl) +); + +reg frz; +always @(posedge CLK_VIDEO) begin + reg frz1; + + frz1 <= HDMI_FREEZE; + frz <= frz1; +end + +generate + if(GAMMA && HALF_DEPTH) begin + wire [7:0] R_in = frz ? 8'd0 : {R,R}; + wire [7:0] G_in = frz ? 8'd0 : {G,G}; + wire [7:0] B_in = frz ? 8'd0 : {B,B}; + end else begin + wire [DWIDTH:0] R_in = frz ? 1'd0 : R; + wire [DWIDTH:0] G_in = frz ? 1'd0 : G; + wire [DWIDTH:0] B_in = frz ? 1'd0 : B; + end +endgenerate + +wire hs_g, vs_g; +wire hb_g, vb_g; +wire [DWIDTH_SD:0] R_gamma, G_gamma, B_gamma; + +generate + if(GAMMA) begin + assign gamma_bus[21] = 1; + gamma_corr gamma( + .clk_sys(gamma_bus[20]), + .clk_vid(CLK_VIDEO), + .ce_pix(ce_pix), + + .gamma_en(gamma_bus[19]), + .gamma_wr(gamma_bus[18]), + .gamma_wr_addr(gamma_bus[17:8]), + .gamma_value(gamma_bus[7:0]), + + .HSync(frz_hs), + .VSync(frz_vs), + .HBlank(frz_hbl), + .VBlank(frz_vbl), + .RGB_in({R_in,G_in,B_in}), + + .HSync_out(hs_g), + .VSync_out(vs_g), + .HBlank_out(hb_g), + .VBlank_out(vb_g), + .RGB_out({R_gamma,G_gamma,B_gamma}) + ); + end else begin + assign gamma_bus[21] = 0; + assign {R_gamma,G_gamma,B_gamma} = {R_in,G_in,B_in}; + assign {hs_g, vs_g, hb_g, vb_g} = {frz_hs, frz_vs, frz_hbl, frz_vbl}; + end +endgenerate + +wire [DWIDTH_SD:0] R_sd; +wire [DWIDTH_SD:0] G_sd; +wire [DWIDTH_SD:0] B_sd; +wire hs_sd, vs_sd, hb_sd, vb_sd, ce_pix_sd; + +scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH_SD)) sd +( + .clk_vid(CLK_VIDEO), + .hq2x(hq2x), + + .ce_pix(ce_pix), + .hs_in(hs_g), + .vs_in(vs_g), + .hb_in(hb_g), + .vb_in(vb_g), + .r_in(R_gamma), + .g_in(G_gamma), + .b_in(B_gamma), .ce_pix_out(ce_pix_sd), .hs_out(hs_sd), @@ -91,77 +165,55 @@ scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) sd .b_out(B_sd) ); -wire [DWIDTH:0] rt = (scandoubler ? R_sd : R); -wire [DWIDTH:0] gt = (scandoubler ? G_sd : G); -wire [DWIDTH:0] bt = (scandoubler ? B_sd : B); +wire [DWIDTH_SD:0] rt = (scandoubler ? R_sd : R_gamma); +wire [DWIDTH_SD:0] gt = (scandoubler ? G_sd : G_gamma); +wire [DWIDTH_SD:0] bt = (scandoubler ? B_sd : B_gamma); -generate - if(HALF_DEPTH) begin - wire [7:0] r = mono ? {gt,rt} : {rt,rt}; - wire [7:0] g = mono ? {gt,rt} : {gt,gt}; - wire [7:0] b = mono ? {gt,rt} : {bt,bt}; - end else begin - wire [7:0] r = rt; - wire [7:0] g = gt; - wire [7:0] b = bt; - end -endgenerate - -wire hs = (scandoubler ? hs_sd : HSync); -wire vs = (scandoubler ? vs_sd : VSync); - -assign ce_pix_out = scandoubler ? ce_pix_sd : ce_pix; - - -reg scanline = 0; -always @(posedge clk_sys) begin - reg old_hs, old_vs; - - old_hs <= hs; - old_vs <= vs; - - if(old_hs && ~hs) scanline <= ~scanline; - if(old_vs && ~vs) scanline <= 0; -end - -wire hde = scandoubler ? ~hb_sd : ~HBlank; -wire vde = scandoubler ? ~vb_sd : ~VBlank; - -always @(posedge clk_sys) begin +always @(posedge CLK_VIDEO) begin + reg [7:0] r,g,b; + reg hde,vde,hs,vs, old_vs; reg old_hde; + reg old_ce; + reg ce_osc, fs_osc; + + old_ce <= ce_pix; + ce_osc <= ce_osc | (old_ce ^ ce_pix); - case(scanlines & {scanline, scanline}) - 1: begin // reduce 25% = 1/2 + 1/4 - VGA_R <= {1'b0, r[7:1]} + {2'b00, r[7:2]}; - VGA_G <= {1'b0, g[7:1]} + {2'b00, g[7:2]}; - VGA_B <= {1'b0, b[7:1]} + {2'b00, b[7:2]}; - end + old_vs <= vs; + if(~old_vs & vs) begin + fs_osc <= ce_osc; + ce_osc <= 0; + end - 2: begin // reduce 50% = 1/2 - VGA_R <= {1'b0, r[7:1]}; - VGA_G <= {1'b0, g[7:1]}; - VGA_B <= {1'b0, b[7:1]}; - end + CE_PIXEL <= scandoubler ? ce_pix_sd : fs_osc ? (~old_ce & ce_pix) : ce_pix; - 3: begin // reduce 75% = 1/4 - VGA_R <= {2'b00, r[7:2]}; - VGA_G <= {2'b00, g[7:2]}; - VGA_B <= {2'b00, b[7:2]}; - end + if(!GAMMA && HALF_DEPTH) begin + r <= {rt,rt}; + g <= {gt,gt}; + b <= {bt,bt}; + end + else begin + r <= rt; + g <= gt; + b <= bt; + end - default: begin - VGA_R <= r; - VGA_G <= g; - VGA_B <= b; - end - endcase + hde <= scandoubler ? ~hb_sd : ~hb_g; + vde <= scandoubler ? ~vb_sd : ~vb_g; + vs <= scandoubler ? vs_sd : vs_g; + hs <= scandoubler ? hs_sd : hs_g; - VGA_VS <= vs; - VGA_HS <= hs; + if(CE_PIXEL) begin + VGA_R <= r; + VGA_G <= g; + VGA_B <= b; - old_hde <= hde; - if(~old_hde && hde) VGA_DE <= vde; - if(old_hde && ~hde) VGA_DE <= 0; + VGA_VS <= vs; + VGA_HS <= hs; + + old_hde <= hde; + if(old_hde ^ hde) VGA_DE <= vde & hde; + end end endmodule diff --git a/sys/vip.qsys b/sys/vip.qsys deleted file mode 100644 index 1f8a5d7..0000000 --- a/sys/vip.qsys +++ /dev/null @@ -1,1177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - - - - - - Avalon-MM Bidirectional,Avalon-MM Bidirectional,Avalon-MM Bidirectional - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {320000000 1600000000} {320000000 1000000000} {800000000 400000000 400000000} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sys/vip_config.sv b/sys/vip_config.sv deleted file mode 100644 index b003798..0000000 --- a/sys/vip_config.sv +++ /dev/null @@ -1,159 +0,0 @@ - -module vip_config -( - input clk, - input reset, - - input [7:0] ARX, - input [7:0] ARY, - input CFG_SET, - - input [11:0] WIDTH, - input [11:0] HFP, - input [11:0] HBP, - input [11:0] HS, - input [11:0] HEIGHT, - input [11:0] VFP, - input [11:0] VBP, - input [11:0] VS, - - input [11:0] VSET, - - output reg [8:0] address, - output reg write, - output reg [31:0] writedata, - input waitrequest -); - - -reg newres = 1; - -wire [21:0] init[23] = -'{ - //video mode - {newres, 2'd2, 7'd04, 12'd0 }, //Bank - {newres, 2'd2, 7'd30, 12'd0 }, //Valid - {newres, 2'd2, 7'd05, 12'd0 }, //Progressive/Interlaced - {newres, 2'd2, 7'd06, w }, //Active pixel count - {newres, 2'd2, 7'd07, h }, //Active line count - {newres, 2'd2, 7'd09, hfp }, //Horizontal Front Porch - {newres, 2'd2, 7'd10, hs }, //Horizontal Sync Length - {newres, 2'd2, 7'd11, hb }, //Horizontal Blanking (HFP+HBP+HSync) - {newres, 2'd2, 7'd12, vfp }, //Vertical Front Porch - {newres, 2'd2, 7'd13, vs }, //Vertical Sync Length - {newres, 2'd2, 7'd14, vb }, //Vertical blanking (VFP+VBP+VSync) - {newres, 2'd2, 7'd30, 12'd1 }, //Valid - {newres, 2'd2, 7'd00, 12'd1 }, //Go - - //mixer - { 1'd1, 2'd1, 7'd03, w }, //Bkg Width - { 1'd1, 2'd1, 7'd04, h }, //Bkg Height - { 1'd1, 2'd1, 7'd08, posx }, //Pos X - { 1'd1, 2'd1, 7'd09, posy }, //Pos Y - { 1'd1, 2'd1, 7'd10, 12'd1 }, //Enable Video 0 - { 1'd1, 2'd1, 7'd00, 12'd1 }, //Go - - //scaler - { 1'd1, 2'd0, 7'd03, videow }, //Output Width - { 1'd1, 2'd0, 7'd04, videoh }, //Output Height - { 1'd1, 2'd0, 7'd00, 12'd1 }, //Go - - 22'h3FFFFF -}; - -reg [11:0] w; -reg [11:0] hfp; -reg [11:0] hbp; -reg [11:0] hs; -reg [11:0] hb; -reg [11:0] h; -reg [11:0] vfp; -reg [11:0] vbp; -reg [11:0] vs; -reg [11:0] vb; - -reg [11:0] videow; -reg [11:0] videoh; - -reg [11:0] posx; -reg [11:0] posy; - -always @(posedge clk) begin - reg [7:0] state = 0; - reg [7:0] arx, ary; - reg [7:0] arxd, aryd; - reg [11:0] vset, vsetd; - reg cfg, cfgd; - reg [31:0] wcalc; - reg [31:0] hcalc; - reg [12:0] timeout = 0; - - arxd <= ARX; - aryd <= ARY; - vsetd <= VSET; - - cfg <= CFG_SET; - cfgd <= cfg; - - write <= 0; - if(reset || (arx != arxd) || (ary != aryd) || (vset != vsetd) || (~cfgd && cfg)) begin - arx <= arxd; - ary <= aryd; - vset <= vsetd; - timeout <= '1; - state <= 0; - if(reset || (~cfgd && cfg)) newres <= 1; - end - else - if(timeout > 0) - begin - timeout <= timeout - 1'd1; - state <= 1; - if(!(timeout & 'h1f)) case(timeout>>5) - 5: begin - w <= WIDTH; - hfp <= HFP; - hbp <= HBP; - hs <= HS; - h <= HEIGHT; - vfp <= VFP; - vbp <= VBP; - vs <= VS; - end - 4: begin - hb <= hfp+hbp+hs; - vb <= vfp+vbp+vs; - end - 3: begin - wcalc <= vset ? (vset*arx)/ary : (h*arx)/ary; - hcalc <= (w*ary)/arx; - end - 2: begin - videow <= (!vset && (wcalc > w)) ? w : wcalc[11:0]; - videoh <= vset ? vset : (hcalc > h) ? h : hcalc[11:0]; - end - 1: begin - posx <= (w - videow)>>1; - posy <= (h - videoh)>>1; - end - endcase - end - else - if(~waitrequest && state) - begin - state <= state + 1'd1; - write <= 0; - if((state&3)==3) begin - if(init[state>>2] == 22'h3FFFFF) begin - state <= 0; - newres <= 0; - end - else begin - writedata <= 0; - {write, address, writedata[11:0]} <= init[state>>2]; - end - end - end -end - -endmodule