From 80f56a2cbfb7b0dd7fa007111e5375b8ae7ebf14 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Thu, 28 Nov 2019 20:28:35 +0800 Subject: [PATCH] Update sys. --- sys/sys.tcl | 44 ++++++------------------------ sys/sys_dual_sdram.tcl | 6 +--- sys/sys_top.sdc | 7 ++--- sys/sys_top.v | 62 ++++++++++++++++++++++++++++++++++++++---- 4 files changed, 68 insertions(+), 51 deletions(-) diff --git a/sys/sys.tcl b/sys/sys.tcl index 0be58d1..6784eba 100644 --- a/sys/sys.tcl +++ b/sys/sys.tcl @@ -99,11 +99,7 @@ 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_REGISTER ON -to SDRAM_* set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] set_instance_assignment -name ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM_* @@ -132,41 +128,17 @@ 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_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_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_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 diff --git a/sys/sys_dual_sdram.tcl b/sys/sys_dual_sdram.tcl index de9fd29..8e18c56 100644 --- a/sys/sys_dual_sdram.tcl +++ b/sys/sys_dual_sdram.tcl @@ -42,11 +42,7 @@ 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_A* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_BA* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_DQ[*] -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_DQM* -set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM2_n* +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 ALLOW_SYNCH_CTRL_USAGE OFF -to *|SDRAM2_* diff --git a/sys/sys_top.sdc b/sys/sys_top.sdc index 1f62a9d..fa19ab7 100644 --- a/sys/sys_top.sdc +++ b/sys/sys_top.sdc @@ -6,13 +6,10 @@ 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 derive_pll_clocks - -create_generated_clock -source [get_pins -compatibility_mode {pll_hdmi|pll_hdmi_inst|altera_pll_i|*[0].*|divclk}] \ - -name HDMI_CLK [get_ports HDMI_TX_CLK] - - derive_clock_uncertainty +set_output_delay -source_latency_included -12.0ns -clock {pll_hdmi|pll_hdmi_inst|altera_pll_i|*[0].*|divclk} [get_ports {HDMI_TX_CLK HDMI_TX_HS HDMI_TX_VS HDMI_TX_D*}] + # Decouple different clock groups (to simplify routing) set_clock_groups -exclusive \ -group [get_clocks { *|pll|pll_inst|altera_pll_i|*[*].*|divclk}] \ diff --git a/sys/sys_top.v b/sys/sys_top.v index 7810890..7638d40 100644 --- a/sys/sys_top.v +++ b/sys/sys_top.v @@ -874,11 +874,63 @@ always @(posedge clk_vid) begin dv_vs <= dv_vs2; end -assign HDMI_TX_CLK = direct_video ? clk_vid : hdmi_clk_out; -assign HDMI_TX_HS = direct_video ? dv_hs : hdmi_hs_osd; -assign HDMI_TX_VS = direct_video ? dv_vs : hdmi_vs_osd; -assign HDMI_TX_DE = direct_video ? dv_de : hdmi_de_osd; -assign HDMI_TX_D = direct_video ? dv_data : hdmi_data_osd; +wire hdmi_tx_clk; +cyclonev_clkselect hdmi_clk_sw +( + .clkselect({1'b1, direct_video}), + .inclk({clk_vid, hdmi_clk_out, 2'b00}), + .outclk(hdmi_tx_clk) +); + +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 <= direct_video ? dv_hs : hdmi_hs_osd; + vs <= direct_video ? dv_vs : hdmi_vs_osd; + de <= direct_video ? dv_de : hdmi_de_osd; + d <= 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 //////////////////////////////////