Kritisches Problem
Die Transaktionsschicht-Konfiguration, Raumsignale, Daten (tl_cfg*)
von der Harten IP für PCI Express angetrieben werden im FPGA Fabric fälschlicherweise Proben entnommen.
Daher kann eine Setup- oder Halte-Zeitverletzung auftreten. Die Quartus Prime Software
meldet die Verletzung nicht, da dieser Multi-Zyklus-Pfad nicht eingeschränkt ist. Wenn ein
Timing-Verletzung tritt auf, das System kann hängen.
Verwenden Sie für Arria 10 Geräte Quartus Prime 16.0.1 oder neuer. Die Transaktionsebene
Die Schnittstelle "Configuration Space Signals" (Konfigurationsraumsignal) ist für acht coreclkout_hip
Personen gehalten
Zyklen. Ihre Application Layer RTL muss Code enthalten, um diese Schnittstelle in der
Mitte des Achtzyklus-Fensters. Siehe das Beispiel RTL unten:
//define register//
reg [3:0] cfg_addr_reg;
reg [3:0] captured_cfg_addr_reg;
reg [31:0] captured_cfg_data_reg;
reg cfgctl_addr_change;
reg cfgctl_addr_change2;
reg cfgctl_addr_strobe;
// detect the address transition
always @(posedge pld_clk or posedge reset)
begin
if (reset == 1\'b1) begin
cfg_addr_reg <= 3\'h0;
cfgctl_addr_change <= 1\'h0;
cfgctl_addr_change2 <= 1\'h0;
cfgctl_addr_strobe <= 1\'h0;
end else begin
cfg_addr_reg[3:0] <= tl_cfg_int_add[3:0];
// detect address change
cfgctl_addr_change <= cfg_addr_reg[3:0] !=
tl_cfg_int_add[3:0];
// delay two clock and use as strobe to sample the input 32-bit
data
cfgctl_addr_change2 <= cfgctl_addr_change;
cfgctl_addr_strobe <= cfgctl_addr_change2;
end
end
// captured cfg ctl addr/data bus with the strobe
always @(posedge pld_clk)
if(cfgctl_addr_strobe)
captured_cfg_addr_reg[3:0] <= tl_cfg_int_add[3:0];
captured_cfg_data_reg[31:0] <= tl_cfg_int_ctl[31:0];
end
Für Arria 10 Geräte müssen Sie die folgenden Zeiteinschränkungen in Ihrem Synposys Design Constraints (SDC)-Datei.
set_multicycle_path -setup -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:altpcie_a10_hip_pipen1b|wys|tl_cfg_add[*]}]
2
set_multicycle_path -hold -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:altpcie_a10_hip_pipen1b|wys|tl_cfg_add[*]}]
2
set_multicycle_path -setup -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:altpcie_a10_hip_pipen1b|wys|tl_cfg_ctl[*]}] 2
set_multicycle_path -hold -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:altpcie_a10_hip_pipen1b|wys|tl_cfg_ctl[*]}]
2
Für Stratix V- und Arria V GZ-Geräte müssen Sie das folgende Timing hinzufügen Beschränkungen in Ihrer SDC-Datei (Synposys Design Constraints).
set_multicycle_path -setup -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:stratixv_hssi_gen3_pcie_hip|tl_cfg_add[*]}]
2
set_multicycle_path -hold -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:stratixv_hssi_gen3_pcie_hip|tl_cfg_add[*]}]
2
set_multicycle_path -setup -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:stratixv_hssi_gen3_pcie_hip|tl_cfg_ctl[*]}] 2
set_multicycle_path -hold -through [get_pins -compatibility_mode -nocase
{*|altpcie_a10_hip_pipen1b:stratixv_hssi_gen3_pcie_hip|tl_cfg_ctl[*]}]
2