mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			217 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
| module endpoint_phy_wrapper
 | |
|   (
 | |
|    input clk_sys_i,
 | |
|    input clk_ref_i,
 | |
|    input clk_rx_i,
 | |
|    input rst_n_i,
 | |
| 
 | |
|    IWishboneMaster.master src,
 | |
|    IWishboneSlave.slave snk,
 | |
|    IWishboneMaster.master sys,
 | |
|    
 | |
|    output [9:0] td_o,
 | |
|    input [9:0] rd_i,
 | |
| 
 | |
|    output txn_o,
 | |
|    output txp_o,
 | |
| 
 | |
|    input rxn_i,
 | |
|    input rxp_i
 | |
|    );
 | |
| 
 | |
|    wire rx_clock;
 | |
|    
 | |
|    parameter g_phy_type   = "GTP";   
 | |
| 
 | |
|    wire[15:0] gtx_data;
 | |
|    wire [1:0]gtx_k;
 | |
|    wire gtx_disparity;
 | |
|    wire gtx_enc_error;
 | |
|    wire [15:0] grx_data;
 | |
|    wire grx_clk;
 | |
|    wire [1:0]grx_k;
 | |
|    wire grx_enc_error;
 | |
|    wire [3:0] grx_bitslide;
 | |
|    wire gtp_rst;
 | |
|    wire tx_clock;
 | |
|    
 | |
|    generate
 | |
|       if(g_phy_type == "TBI") begin
 | |
| 
 | |
|          assign rx_clock  = clk_ref_i;
 | |
|          assign tx_clock  = clk_rx_i;
 | |
|          
 | |
|          
 | |
|          wr_tbi_phy U_Phy 
 | |
|            (
 | |
|             .serdes_rst_i (gtp_rst),
 | |
|             .serdes_loopen_i(1'b0),
 | |
|             .serdes_prbsen_i(1'b0),
 | |
|             .serdes_enable_i(1'b1), 
 | |
|             .serdes_syncen_i(1'b1),
 | |
| 
 | |
|             .serdes_tx_data_i  (gtx_data[7:0]),
 | |
|             .serdes_tx_k_i     (gtx_k[0]),
 | |
|             .serdes_tx_disparity_o (gtx_disparity),
 | |
|             .serdes_tx_enc_err_o   (gtx_enc_error),
 | |
| 
 | |
|             .serdes_rx_data_o      (grx_data[7:0]),
 | |
|             .serdes_rx_k_o        (grx_k[0]),
 | |
|             .serdes_rx_enc_err_o  (grx_enc_error),
 | |
|             .serdes_rx_bitslide_o (grx_bitslide),
 | |
| 
 | |
| 
 | |
|             .tbi_refclk_i (clk_ref_i),
 | |
|             .tbi_rbclk_i  (clk_rx_i),
 | |
| 
 | |
|             .tbi_td_o     (td_o),
 | |
|             .tbi_rd_i     (rd_i),
 | |
|             .tbi_syncen_o (),
 | |
|             .tbi_loopen_o (),
 | |
|             .tbi_prbsen_o (),
 | |
|             .tbi_enable_o ()
 | |
|             );
 | |
| 
 | |
|       end else if (g_phy_type == "GTX") begin // if (g_phy_type == "TBI")
 | |
|          wr_gtx_phy_virtex6
 | |
|            #(
 | |
|              .g_simulation(1)
 | |
|              ) U_PHY 
 | |
|              (
 | |
|               .clk_ref_i(clk_ref_i),
 | |
|               
 | |
|               .tx_clk_o   (tx_clock),
 | |
|               .tx_data_i (gtx_data),
 | |
|               .tx_k_i (gtx_k),
 | |
|               .tx_disparity_o (gtx_disparity),
 | |
|               .tx_enc_err_o(gtx_enc_error),
 | |
|               .rx_rbclk_o (rx_clock),
 | |
|               .rx_data_o (grx_data),
 | |
|               .rx_k_o  (grx_k),
 | |
|               .rx_enc_err_o (grx_enc_error),
 | |
|               .rx_bitslide_o  (),
 | |
| 
 | |
|               .rst_i    (!rst_n_i),
 | |
|               .loopen_i (1'b0),
 | |
| 
 | |
|               .pad_txn_o (txn_o),
 | |
|               .pad_txp_o (txp_o),
 | |
| 
 | |
|               .pad_rxn_i (rxn_i),
 | |
|               .pad_rxp_i (rxp_i)
 | |
|     );
 | |
|                    
 | |
|       end  else if (g_phy_type == "GTP") begin // if (g_phy_type == "TBI")
 | |
|          assign #1 tx_clock  = clk_ref_i;
 | |
|          
 | |
|          wr_gtp_phy_spartan6
 | |
|            #(
 | |
|              .g_simulation(1)
 | |
|              ) U_PHY 
 | |
|              (
 | |
|               .gtp_clk_i(clk_ref_i),
 | |
|               .ch0_ref_clk_i(clk_ref_i),
 | |
|               
 | |
|               .ch0_tx_data_i (gtx_data[7:0]),
 | |
|               .ch0_tx_k_i (gtx_k[0]),
 | |
|               .ch0_tx_disparity_o (gtx_disparity),
 | |
|               .ch0_tx_enc_err_o(gtx_enc_error),
 | |
|               .ch0_rx_rbclk_o (rx_clock),
 | |
|               .ch0_rx_data_o (grx_data[7:0]),
 | |
|               .ch0_rx_k_o  (grx_k[0]),
 | |
|               .ch0_rx_enc_err_o (grx_enc_error),
 | |
|               .ch0_rx_bitslide_o  (),
 | |
| 
 | |
|               .ch0_rst_i    (!rst_n_i),
 | |
|               .ch0_loopen_i (1'b0),
 | |
| 
 | |
|               .pad_txn0_o (txn_o),
 | |
|               .pad_txp0_o (txp_o),
 | |
| 
 | |
|               .pad_rxn0_i (rxn_i),
 | |
|               .pad_rxp0_i (rxp_i)
 | |
|               );
 | |
|          
 | |
|       end // else: !if(g_phy_type == "TBI")
 | |
|    endgenerate
 | |
|    
 | |
|    wr_endpoint
 | |
|      #(
 | |
|        .g_simulation          (1),
 | |
|        .g_pcs_16bit(g_phy_type == "GTX" ? 1: 0),
 | |
|        .g_rx_buffer_size (1024),
 | |
|        .g_with_rx_buffer(0),
 | |
|        .g_with_timestamper    (1),
 | |
|        .g_with_dmtd           (0),
 | |
|        .g_with_dpi_classifier (1),
 | |
|        .g_with_vlans          (0),
 | |
|        .g_with_rtu            (0)
 | |
|        ) DUT (
 | |
|               .clk_ref_i (clk_ref_i),
 | |
|               .clk_sys_i (clk_sys_i),
 | |
|               .clk_dmtd_i (clk_ref_i),
 | |
|               .rst_n_i  (rst_n_i),
 | |
|               .pps_csync_p1_i (1'b0),
 | |
| 
 | |
|               .phy_rst_o   (),
 | |
|               .phy_loopen_o (),
 | |
|               .phy_enable_o (),
 | |
|               .phy_syncen_o (),
 | |
| 
 | |
|               .phy_ref_clk_i      (tx_clock),
 | |
|               .phy_tx_data_o      (gtx_data),
 | |
|               .phy_tx_k_o         (gtx_k),
 | |
|               .phy_tx_disparity_i (gtx_disparity),
 | |
|               .phy_tx_enc_err_i   (gtx_enc_error),
 | |
| 
 | |
|               .phy_rx_data_i     (grx_data),
 | |
|               .phy_rx_clk_i      (rx_clock),
 | |
|               .phy_rx_k_i        (grx_k),
 | |
|               .phy_rx_enc_err_i  (grx_enc_error),
 | |
|               .phy_rx_bitslide_i (5'b0),
 | |
| 
 | |
|               .src_dat_o   (snk.dat_i),
 | |
|               .src_adr_o   (snk.adr),
 | |
|               .src_sel_o   (snk.sel),
 | |
|               .src_cyc_o   (snk.cyc),
 | |
|               .src_stb_o   (snk.stb),
 | |
|               .src_we_o    (snk.we),
 | |
|               .src_stall_i (snk.stall),
 | |
|               .src_ack_i   (snk.ack),
 | |
|               .src_err_i(1'b0),
 | |
| 
 | |
|               .snk_dat_i   (src.dat_o[15:0]),
 | |
|               .snk_adr_i   (src.adr[1:0]),
 | |
|               .snk_sel_i   (src.sel[1:0]),
 | |
|               .snk_cyc_i   (src.cyc),
 | |
|               .snk_stb_i   (src.stb),
 | |
|               .snk_we_i    (src.we),
 | |
|               .snk_stall_o (src.stall),
 | |
|               .snk_ack_o   (src.ack),
 | |
|               .snk_err_o   (src.err),
 | |
|               .snk_rty_o   (src.rty),
 | |
| 
 | |
|               .txtsu_ack_i (1'b1),
 | |
| 
 | |
|               .rtu_full_i (1'b0),
 | |
|               .rtu_almost_full_i (1'b0),
 | |
|               .rtu_rq_strobe_p1_o  (),
 | |
|               .rtu_rq_smac_o  (),
 | |
|               .rtu_rq_dmac_o (),
 | |
|               .rtu_rq_vid_o  (),
 | |
|               .rtu_rq_has_vid_o (),
 | |
|               .rtu_rq_prio_o (),
 | |
|               .rtu_rq_has_prio_o (),
 | |
| 
 | |
|               .wb_cyc_i(sys.cyc),
 | |
|               .wb_stb_i (sys.stb),
 | |
|               .wb_we_i (sys.we),
 | |
|               .wb_sel_i(sys.sel),
 | |
|               .wb_adr_i(sys.adr[7:0]),
 | |
|               .wb_dat_i(sys.dat_o),
 | |
|               .wb_dat_o(sys.dat_i),
 | |
|               .wb_ack_o (sys.ack)
 | |
|     );
 | |
| 
 | |
| endmodule // endpoint_phy_wrapper
 |