OpenCores
URL https://opencores.org/ocsvn/pcie_sg_dma/pcie_sg_dma/trunk

Subversion Repositories pcie_sg_dma

[/] [pcie_sg_dma/] [trunk/] [sim/] [tf64_pcie_trn.v] - Diff between revs 3 and 4

Show entire file | Details | Blame | View Log

Rev 3 Rev 4
Line 34... Line 34...
`define  T_HALF_CYCLE_MEMCLK                5.0
`define  T_HALF_CYCLE_MEMCLK                5.0
`define  T_DELAY_AFTER                      0.0
`define  T_DELAY_AFTER                      0.0
`define  T_DELTA                            0.1
`define  T_DELTA                            0.1
`define  T_PIO_INTERVAL                    50.0
`define  T_PIO_INTERVAL                    50.0
`define  T_DMA_INTERVAL                   300.0
`define  T_DMA_INTERVAL                   300.0
//`define  T_DMA_TURN_AROUND                100.0
 
//`define  T_STATISTIC_INTERVAL           10000.0
 
`define  T_RX_NO_FC_PERIOD            1900000.0
`define  T_RX_NO_FC_PERIOD            1900000.0
`define  T_TX_NO_FC_PERIOD            1500000.0
`define  T_TX_NO_FC_PERIOD            1500000.0
 
 
  /* Memory size for simulation */
  /* Memory size for simulation */
`define  C_ARRAY_DIMENSION              4096
`define  C_ARRAY_DIMENSION              4096
Line 386... Line 384...
                mbuf_UserFull = 0;
                mbuf_UserFull = 0;
                pcie_link_width = 'H19;
                pcie_link_width = 'H19;
      cfg_dcommand = 'H2000;
      cfg_dcommand = 'H2000;
                localID = 'HD841;
                localID = 'HD841;
 
 
      Rx_No_Flow_Control = 0;
      Rx_No_Flow_Control = 1;    // = 0;  // Set to 0 to enable the Rx throttling
      Tx_No_Flow_Control = 0;
      Tx_No_Flow_Control = 1;    // = 0;  // Set to 0 to enable the Tx throttling
 
 
                // Wait some nanoseconds for global reset to finish
                // Wait some nanoseconds for global reset to finish
                #100;
                #100;
                trn_reset_n = 1;
                trn_reset_n = 1;
                trn_lnk_up_n = 0;
                trn_lnk_up_n = 0;
Line 461... Line 459...
    Gap_Insert_Rx;
    Gap_Insert_Rx;
 
 
    PIO_bar               <= -1;
    PIO_bar               <= -1;
    DMA_bar               <= 'H1;
    DMA_bar               <= 'H1;
    Rx_MWr_Tag            <= 'H80;
    Rx_MWr_Tag            <= 'H80;
    Rx_MRd_Tag            <= 'H20;
    Rx_MRd_Tag            <= 'H10;
 
 
 
 
    // Initialization: TLP
    // Initialization: TLP
    # 400
    # 400
      Rx_TLP_Length    <= 'H01;
      Rx_TLP_Length    <= 'H01;
Line 765... Line 763...
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_DS_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
       FSM_Trn          <= 'H18;
       FSM_Trn          <= 'H18;
 
 
 
 
       // feeding the payload CplD
       // feeding the payload CplD
       wait (tx_MRd_come);
       wait (tx_MRd_come);
Line 822... Line 831...
       TLP_Feed_Rx(`USE_PUBLIC, CplD_Index, `C_NO_BAR_HIT);
       TLP_Feed_Rx(`USE_PUBLIC, CplD_Index, `C_NO_BAR_HIT);
       CplD_Index   <= CplD_Index + Rx_TLP_Length;
       CplD_Index   <= CplD_Index + Rx_TLP_Length;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_DS_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
 
 
       FSM_Trn          <= 'H1C;
       FSM_Trn          <= 'H1C;
 
 
     # `T_DMA_INTERVAL
     # `T_DMA_INTERVAL
       ;
       ;
 
 
Line 902... Line 924...
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_US_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
       FSM_Trn          <= 'H20;
       FSM_Trn          <= 'H20;
 
 
     # (`T_DMA_INTERVAL*4)
     # (`T_DMA_INTERVAL*4)
       ;
       ;
 
 
Line 1139... Line 1173...
       TLP_Feed_Rx(`USE_PUBLIC, CplD_Index, `C_NO_BAR_HIT);
       TLP_Feed_Rx(`USE_PUBLIC, CplD_Index, `C_NO_BAR_HIT);
       CplD_Index   <= CplD_Index + Rx_TLP_Length;
       CplD_Index   <= CplD_Index + Rx_TLP_Length;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_DS_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
 
 
       FSM_Trn          <= 'H2C;
       FSM_Trn          <= 'H2C;
 
 
 
 
       // feeding the payload CplD (2nd descriptor)
       // feeding the payload CplD (2nd descriptor)
       wait (tx_MRd_come);
       wait (tx_MRd_come);
Line 1304... Line 1351...
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Rx_MWr_Tag   <= Rx_MWr_Tag + 1;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_US_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
       FSM_Trn          <= 'H34;
       FSM_Trn          <= 'H34;
 
 
 
 
       // feeding the descriptor CplD
       // feeding the descriptor CplD
       wait (Desc_tx_MRd_Valid);
       wait (Desc_tx_MRd_Valid);
Line 1340... Line 1399...
     # `T_DELTA
     # `T_DELTA
       TLP_Feed_Rx(`USE_PRIVATE, 0, `C_NO_BAR_HIT);
       TLP_Feed_Rx(`USE_PRIVATE, 0, `C_NO_BAR_HIT);
       Gap_Insert_Rx;
       Gap_Insert_Rx;
 
 
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_US_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
 
 
 
     # (`T_DMA_INTERVAL*4)
 
       ;
 
 
 
       Rx_TLP_Length    <= 'H01;
 
     # `T_DELTA     // Polling the DMA status
 
       Hdr_Array[0] <= `HEADER0_MRD3_ | Rx_TLP_Length[9:0];
 
       Hdr_Array[1] <= {`C_HOST_RDREQ_ID, 3'H3, Rx_MRd_Tag, 4'Hf, 4'Hf};
 
       Hdr_Array[2] <= `C_ADDR_DMA_US_STA;
 
 
 
 
 
     # `T_DELTA
 
       TLP_Feed_Rx(`USE_PRIVATE, 'H0, `C_BAR0_HIT);
 
       Rx_MRd_Tag       <= Rx_MRd_Tag + 1;
 
       Gap_Insert_Rx;
 
 
       FSM_Trn          <= 'H38;
       FSM_Trn          <= 'H38;
 
 
     # (`T_DMA_INTERVAL*8)
     # (`T_DMA_INTERVAL*4)
       ;
       ;
 
 
 
 
  //////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////
 
 
Line 1688... Line 1774...
                    Err_signal    <= 0;
                    Err_signal    <= 0;
                    FSM_TLP_Fmt      <= 'H10;
                    FSM_TLP_Fmt      <= 'H10;
                  end
                  end
                  else if (tx_TLP_is_CplD) begin
                  else if (tx_TLP_is_CplD) begin
                    Err_signal   <= 1;
                    Err_signal   <= 1;
                    $display ("\n %t:\n !! CplD Requester ID Wrong (TLP Length ==1 )!! ", $time);
                    $display ("\n %t:\n !! Tx CplD Requester ID Wrong (TLP Length ==1 )!! ", $time);
 
                    FSM_TLP_Fmt      <= 'H10;
                  end
                  end
                  else begin
                  else begin
                    Err_signal    <= 0;
                    Err_signal    <= 0;
                    FSM_TLP_Fmt      <= 'H10;
                    FSM_TLP_Fmt      <= 'H10;
                  end
                  end
Line 1708... Line 1795...
                    tx_TLP_Length      <= tx_TLP_Length - 1;
                    tx_TLP_Length      <= tx_TLP_Length - 1;
                    FSM_TLP_Fmt        <= 'H20;
                    FSM_TLP_Fmt        <= 'H20;
                  end
                  end
                  else if (tx_TLP_is_CplD) begin
                  else if (tx_TLP_is_CplD) begin
                    Err_signal   <= 1;
                    Err_signal   <= 1;
                    $display ("\n %t:\n !! CplD Requester ID Wrong (TLP Length !=1 )!! ", $time);
                    $display ("\n %t:\n !! Tx CplD Requester ID Wrong (TLP Length !=1 )!! ", $time);
 
                    FSM_TLP_Fmt        <= 'H20;
                  end
                  end
                  else begin
                  else begin
                    tx_TLP_Length      <= tx_TLP_Length - 1;
                    tx_TLP_Length      <= tx_TLP_Length - 1;
                    FSM_TLP_Fmt        <= 'H20;
                    FSM_TLP_Fmt        <= 'H20;
                  end
                  end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.