diff --git a/.gitignore b/.gitignore index 9dfb0099f..b5e0f97bc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,26 @@ xgui *.srcs *.sdk .Xil +*_INFO.txt +*_dump.txt +db +*.asm.rpt +*.done +*.eda.rpt +*.fit.* +*.map.* +*.sta.* +*.qsf +*.qpf +*.qws +*.sof +hc_output +hps_isw_handoff +hps_sdram_*.csv +incremental_db +reconfig_mif +*.sopcinfo +*.jdi +*.pin + + diff --git a/projects/common/a5soc/a5soc_system_assign.tcl b/projects/common/a5soc/a5soc_system_assign.tcl index 2e79736f1..cdf1016d5 100755 --- a/projects/common/a5soc/a5soc_system_assign.tcl +++ b/projects/common/a5soc/a5soc_system_assign.tcl @@ -1,9 +1,48 @@ # clocks -set_location_assignment PIN_AU32 -to sys_clk +set_location_assignment PIN_AL20 -to sys_clk set_instance_assignment -name IO_STANDARD "1.5 V" -to sys_clk +# hdmi +# data[6] (C23) and data[10] (C22) are not populated +# replacing with C19) and C18 for now + +set_location_assignment PIN_A21 -to hdmi_out_clk +set_location_assignment PIN_B25 -to hdmi_data[0] +set_location_assignment PIN_A25 -to hdmi_data[1] +set_location_assignment PIN_A24 -to hdmi_data[2] +set_location_assignment PIN_T25 -to hdmi_data[3] +set_location_assignment PIN_A23 -to hdmi_data[4] +set_location_assignment PIN_P22 -to hdmi_data[5] +set_location_assignment PIN_T27 -to hdmi_data[6] +set_location_assignment PIN_T26 -to hdmi_data[7] +set_location_assignment PIN_N22 -to hdmi_data[8] +set_location_assignment PIN_T21 -to hdmi_data[9] +set_location_assignment PIN_R26 -to hdmi_data[10] +set_location_assignment PIN_D20 -to hdmi_data[11] +set_location_assignment PIN_R21 -to hdmi_data[12] +set_location_assignment PIN_F22 -to hdmi_data[13] +set_location_assignment PIN_C20 -to hdmi_data[14] +set_location_assignment PIN_E22 -to hdmi_data[15] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_out_clk +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[0] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[1] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[2] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[3] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[4] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[5] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[6] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[7] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[8] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[9] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[10] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[11] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[12] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[13] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[14] +set_instance_assignment -name IO_STANDARD "2.5 V" -to hdmi_data[15] + # ethernet set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to eth1_tx_clk diff --git a/projects/fmcjesdadc1/a5soc/system_bd.qsys b/projects/fmcjesdadc1/a5soc/system_bd.qsys index 3316de6a9..5b05981d0 100755 --- a/projects/fmcjesdadc1/a5soc/system_bd.qsys +++ b/projects/fmcjesdadc1/a5soc/system_bd.qsys @@ -16,7 +16,7 @@ { datum baseAddress { - value = "66576"; + value = "83280"; type = "String"; } } @@ -24,11 +24,55 @@ { datum _sortIndex { - value = "9"; + value = "13"; type = "int"; } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } } element axi_ad9250_1 + { + datum _sortIndex + { + value = "15"; + type = "int"; + } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } + } + element axi_dmac_0 + { + datum _sortIndex + { + value = "14"; + type = "int"; + } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } + } + element axi_dmac_1 + { + datum _sortIndex + { + value = "16"; + type = "int"; + } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } + } + element axi_hdmi_dma { datum _sortIndex { @@ -36,15 +80,7 @@ type = "int"; } } - element axi_dmac_0 - { - datum _sortIndex - { - value = "10"; - type = "int"; - } - } - element axi_dmac_1 + element axi_hdmi_tx { datum _sortIndex { @@ -56,7 +92,15 @@ { datum baseAddress { - value = "66584"; + value = "83288"; + type = "String"; + } + } + element axi_hdmi_dma.csr + { + datum baseAddress + { + value = "83200"; type = "String"; } } @@ -88,15 +132,15 @@ { datum baseAddress { - value = "65536"; + value = "81920"; type = "String"; } } - element sys_gpio.s1 + element sys_hdmi_pll_reconfig.mgmt_avalon_slave { datum baseAddress { - value = "66560"; + value = "82944"; type = "String"; } } @@ -108,15 +152,23 @@ type = "String"; } } - element axi_dmac_0.s_axi + element sys_gpio.s1 { datum baseAddress { - value = "32768"; + value = "83264"; type = "String"; } } element axi_ad9250_0.s_axi + { + datum baseAddress + { + value = "65536"; + type = "String"; + } + } + element axi_dmac_0.s_axi { datum baseAddress { @@ -128,7 +180,15 @@ { datum baseAddress { - value = "16384"; + value = "32768"; + type = "String"; + } + } + element axi_hdmi_tx.s_axi + { + datum baseAddress + { + value = "0"; type = "String"; } } @@ -136,7 +196,7 @@ { datum baseAddress { - value = "0"; + value = "16384"; type = "String"; } } @@ -156,6 +216,22 @@ type = "int"; } } + element sys_hdmi_pll + { + datum _sortIndex + { + value = "9"; + type = "int"; + } + } + element sys_hdmi_pll_reconfig + { + datum _sortIndex + { + value = "10"; + type = "int"; + } + } element sys_hps { datum _sortIndex @@ -184,33 +260,53 @@ { datum _sortIndex { - value = "16"; + value = "20"; type = "int"; } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } } element sys_jesd204b_s1_pll { datum _sortIndex { - value = "14"; + value = "18"; type = "int"; } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } } element sys_jesd204b_s1_ref_clk { datum _sortIndex { - value = "13"; + value = "17"; type = "int"; } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } } element sys_jesd204b_s1_rx_clk { datum _sortIndex { - value = "15"; + value = "19"; type = "int"; } + datum sopceditor_expanded + { + value = "1"; + type = "boolean"; + } } element sys_jtag_hps_axi { @@ -255,7 +351,7 @@ - + fmcjesdadc1_a5soc.qpf @@ -453,6 +549,31 @@ internal="sys_gpio.external_connection" type="conduit" dir="end" /> + + + + + @@ -671,6 +792,7 @@ + @@ -848,20 +970,20 @@ Yes,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,Yes,Yes,No,No,No,Yes,No,Yes,No,Yes,Yes,No,No,No,No,No,No,No,Yes,No,No,No,No,Yes,Yes,Yes,Yes,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 - + - + - - - - - + + + + + @@ -946,7 +1068,7 @@ name="sys_id"> - + - + - + @@ -1031,7 +1153,7 @@ - + @@ -1050,13 +1172,13 @@ - + - + @@ -1075,7 +1197,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Automatic Switchover + + + + + + + Create an adjpllin signal to connect with an upstream PLL + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1363,7 +1731,7 @@ start="sys_jtag_pl.master" end="sys_uart.avalon_jtag_slave"> - + - + - + - + - + - + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/projects/fmcjesdadc1/a5soc/system_constr.sdc b/projects/fmcjesdadc1/a5soc/system_constr.sdc index d4f1af9b8..d777aa616 100755 --- a/projects/fmcjesdadc1/a5soc/system_constr.sdc +++ b/projects/fmcjesdadc1/a5soc/system_constr.sdc @@ -1,18 +1,25 @@ -create_clock -period "20.000 ns" -name clk_50m [get_ports {sys_clk}] -create_clock -period "4.000 ns" -name clk_250m [get_ports {ref_clk}] -create_clock -period "5.000 ns" -name clk_200m [get_pins {i_system_bd|sys_hps|fpga_interfaces|clocks_resets|h2f_user0_clk}] +create_clock -period "10.000 ns" -name clk_100m [get_ports {sys_clk}] +create_clock -period "4.000 ns" -name clk_250m [get_ports {ref_clk}] +create_clock -period "6.666 ns" -name clk_150m [get_pins {i_system_bd|sys_hps|fpga_interfaces|clocks_resets|h2f_user0_clk}] derive_pll_clocks derive_clock_uncertainty +set clk_148m [get_clocks {i_system_bd|sys_hdmi_pll|altera_pll_i|arriav_pll|counter[0].output_counter|divclk}] set clk_rxlink [get_clocks {i_system_bd|sys_jesd204b_s1_pll|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -set_false_path -from clk_50m -to clk_200m -set_false_path -from clk_50m -to $clk_rxlink -set_false_path -from clk_200m -to clk_50m -set_false_path -from clk_200m -to $clk_rxlink -set_false_path -from $clk_rxlink -to clk_50m -set_false_path -from $clk_rxlink -to clk_200m +set_false_path -from clk_100m -to clk_150m +set_false_path -from clk_100m -to $clk_148m +set_false_path -from clk_100m -to $clk_rxlink +set_false_path -from clk_150m -to clk_100m +set_false_path -from clk_150m -to $clk_148m +set_false_path -from clk_150m -to $clk_rxlink +set_false_path -from $clk_rxlink -to clk_100m +set_false_path -from $clk_rxlink -to clk_150m +set_false_path -from $clk_rxlink -to $clk_148m +set_false_path -from $clk_148m -to clk_100m +set_false_path -from $clk_148m -to clk_150m +set_false_path -from $clk_148m -to $clk_rxlink diff --git a/projects/fmcjesdadc1/a5soc/system_top.v b/projects/fmcjesdadc1/a5soc/system_top.v index 7c49e903f..e5feda392 100755 --- a/projects/fmcjesdadc1/a5soc/system_top.v +++ b/projects/fmcjesdadc1/a5soc/system_top.v @@ -133,6 +133,11 @@ module system_top ( push_buttons, dip_switches, + // hdmi + + hdmi_out_clk, + hdmi_data, + // lane interface ref_clk, @@ -240,6 +245,11 @@ module system_top ( input [ 3:0] push_buttons; input [ 3:0] dip_switches; + // hdmi + + output hdmi_out_clk; + output [ 3:0] hdmi_data; + // lane interface input ref_clk; @@ -259,6 +269,8 @@ module system_top ( reg rx_sysref_m2 = 'd0; reg rx_sysref_m3 = 'd0; reg rx_sysref = 'd0; + reg [ 63:0] sys_hdmi_pll_reconfig_in = 'd0; + reg [ 63:0] sys_hdmi_pll_reconfig_reconfig_in = 'd0; // internal clocks and resets @@ -301,6 +313,10 @@ module system_top ( wire [ 3:0] rx_cal_busy_s; wire rx_pll_locked_s; wire [ 15:0] rx_xcvr_status_s; + wire [ 63:0] sys_hdmi_pll_reconfig_out; + wire [ 63:0] sys_hdmi_pll_reconfig_reconfig_out; + + // instantiations always @(posedge rx_clk) begin rx_sysref_m1 <= rx_sysref_s; @@ -373,6 +389,13 @@ module system_top ( .spi3_clk (spi_clk), .spi3_sdio (spi_sdio)); + // pipe line to fix timing + + always @(posedge sys_clk) begin + sys_hdmi_pll_reconfig_in <= sys_hdmi_pll_reconfig_reconfig_out; + sys_hdmi_pll_reconfig_reconfig_in <= sys_hdmi_pll_reconfig_out; + end + system_bd i_system_bd ( .memory_mem_a (ddr3_a), .memory_mem_ba (ddr3_ba), @@ -516,7 +539,25 @@ module system_top ( .hps_io_hps_io_gpio_inst_GPIO43 (gpio_gpio43), .sys_hps_h2f_reset_reset_n (sys_resetn), .sys_gpio_external_connection_in_port ({rx_xcvr_status_s, 4'd0, push_buttons, 4'd0, dip_switches}), - .sys_gpio_external_connection_out_port ({14'd0, rx_sw_rstn_s, rx_sysref_s, 12'd0, led})); + .sys_gpio_external_connection_out_port ({14'd0, rx_sw_rstn_s, rx_sysref_s, 12'd0, led}), + .axi_hdmi_tx_0_hdmi_if_h_clk (hdmi_out_clk), + .axi_hdmi_tx_0_hdmi_if_h16_hsync (), + .axi_hdmi_tx_0_hdmi_if_h16_vsync (), + .axi_hdmi_tx_0_hdmi_if_h16_data_e (), + .axi_hdmi_tx_0_hdmi_if_h16_data (), + .axi_hdmi_tx_0_hdmi_if_h16_es_data (hdmi_data), + .axi_hdmi_tx_0_hdmi_if_h24_hsync (), + .axi_hdmi_tx_0_hdmi_if_h24_vsync (), + .axi_hdmi_tx_0_hdmi_if_h24_data_e (), + .axi_hdmi_tx_0_hdmi_if_h24_data (), + .axi_hdmi_tx_0_hdmi_if_h36_hsync (), + .axi_hdmi_tx_0_hdmi_if_h36_vsync (), + .axi_hdmi_tx_0_hdmi_if_h36_data_e (), + .axi_hdmi_tx_0_hdmi_if_h36_data (), + .sys_hdmi_pll_reconfig_to_pll_reconfig_to_pll (sys_hdmi_pll_reconfig_in), + .sys_hdmi_pll_reconfig_from_pll_reconfig_from_pll (sys_hdmi_pll_reconfig_out), + .sys_hdmi_pll_reconfig_reconfig_to_pll_reconfig_to_pll (sys_hdmi_pll_reconfig_reconfig_out), + .sys_hdmi_pll_reconfig_reconfig_from_pll_reconfig_from_pll (sys_hdmi_pll_reconfig_reconfig_in)); endmodule