用于 PCIe* 解决方案的 Intel® Stratix® 10 Avalon® -ST和Single Root I/O Virtualization (SR-IOV)接口用户指南

ID 683111
日期 12/06/2017
Public
文档目录

B. TX信用调整示例代码

此实例Verilog HDL代码计算非发布TLP的可用信用。 它在tx_nph_cdtstx_npd_cdts总线上提供来自远程器件的更新信用信息。 tx_nph_cdtstx_npd_cdts总线驱动链路伙伴的RX缓冲区中的实际可用信用空间。由于EMIB(嵌入式多芯片互联桥)延迟,很难使用实际的信用空间。

以下Verilog RTL恢复了对非发布TLP的信用限制,在发送到TLP之前可被应用逻辑使用。

module nph_credit_limit_gen (
    input          clk,
    input          rst_n,
    input  [7:0]   tx_nph_cdts,
    input          tx_hdr_cdts_consumed,
    input  [1:0]   tx_cdts_type,
    output [7:0]   tx_nph_cdts_limit
);
 
    reg        tx_nph_credit_consume_1r;
    reg        tx_nph_credit_consume_2r;
    reg  [7:0] tx_nph_credit_consume_count_hip_3r;
 
    always @(posedge clk) begin
        if (!rst_n) begin
            tx_nph_credit_consume_1r        <= 1'b0;
            tx_nph_credit_consume_2r        <= 1'b0;
            tx_nph_credit_consume_count_hip <= 8'h0;

        end else begin
            tx_nph_credit_consume_1r <= (tx_cdts_type == 2'b01) ? 
                tx_hdr_cdts_consumed : 1'b0;
            tx_nph_credit_consume_2r <= tx_nph_credit_consume_1r;
            tx_nph_credit_consume_count_hip_3r <= 
                tx_nph_credit_consume_count_hip_3r + tx_nph_credit_consume_2r;
        end
    end 
 
    assign tx_nph_cdts_limit = tx_nph_cdts + tx_nph_credit_consume_count_hip_3r;
 
endmodule

以下伪代码解释了上面的Verilog RTL。

// reset credit_consume_count initially
tx_nph_credit_consume_count      = 0; 
tx_nph_credit_consume_count_hip  = 0;

if  (tx_nph_credit_limit_count – (tx_nph_credit_consume_count + tx_nph_credit_required) <= (2^8)/2) { 
  send NPH packet 
  tx_nph_credit_consume_count += tx_nph_credit_required;
}

where 
tx_nph_credit_required: the number of credits required to send given NP TLP. For NP, tx_nph_credit_required is 1.
tx_nph_credit_consume_count_hip += (tx_cdts_type == "01") ? tx_hdr_cdts_consumed : 1'b0;
tx_nph_credit_consume_count_hip_delayed : three pld_clk cycle delayed tx_nph_credit_consume_count_hip
tx_nph_credit_limit_count = tx_nph_cdts + tx_nph_credit_consume_count_hip_delayed;