//////////////////////// //LVDS-BUS SYSTEM DEMO// //////////////////////// module master_top( input resetn, input clock, input lvds_up_din_p, input lvds_up_din_n, output lvds_down_dout_p, output lvds_down_dout_n, input [12:0] io_FSMC_addr, input [7:0] io_FSMC_dataIn, output [7:0] io_FSMC_dataOut, output io_FSMC_dataOEn, input io_FSMC_cen, input io_FSMC_oen, input io_FSMC_wen ); wire clk_400m; wire clk_100m; wire clk_50m; wire clk_50m_a; wire clk_10m; reg rst_n; wire lvds_down_dout; wire lvds_up_din; reg rstn_d; wire lock; always@(posedge clk_10m) begin rstn_d <= resetn; rst_n <= rstn_d; end //reset sync module, all the IDES/OSER and related CLKDIV MUST be reset by this module oser_rst u_oser_rst( .clk_in(clock), // or any other speed comparble with fabric, DO NOT use HCLK as fabric cannot work at so high speed. .rst_n(rst_n), .pll_lock(lock), // trigged by PLL Lock .reset_stop(reset_stop), // for DHCEN CE .reset_calib(reset_calib), // for IDES and CLKDIV reset .set_calib(), .ready() ); DHCEN dhcen_inst ( .CLKIN(clk_400m), .CE(reset_stop), .CLKOUT(clk_400m_a) ); Gowin_PLLO Gowin_PLLO( .lock(lock), .clkouta(clk_400m), .clkoutc(clk_50m), .clkoutd(clk_100m), .clkin(clock) ); TLVDS_OBUF lvds_downstream_out( .O(lvds_down_dout_p), .OB(lvds_down_dout_n), .I(lvds_down_dout) ); TLVDS_IBUF lvds_upstream_in( .O(lvds_up_din), .I(lvds_up_din_p), .IB(lvds_up_din_n) ); defparam Inst5_CLKDIVC.DIV_MODE = "5" ; CLKDIV Inst5_CLKDIVC( .RESETN (1'b1 ), .HCLKIN (clk_50m), .CALIB (1'b0 ), .CLKOUT (clk_10m ) ); BackBoardMst i_BackBoardMst( .io_FSMC_addr(io_FSMC_addr), .io_FSMC_dataIn(io_FSMC_dataIn), .io_FSMC_dataOut(io_FSMC_dataOut), .io_FSMC_dataOEn(io_FSMC_dataOEn), .io_FSMC_cen(io_FSMC_cen), .io_FSMC_oen(io_FSMC_oen), .io_FSMC_wen(io_FSMC_wen), .io_reset(~rst_n), .io_oser_pclk(clk_10m), .io_oser_fclk(clk_50m), .io_ides_pclk(clk_100m), .io_ides_fclk(clk_400m), .io_lvds_down_dout(lvds_down_dout), .io_lvds_up_din(lvds_up_din) ); endmodule