Problème critique
L’espace de configuration de la couche de transaction signale les données (tl_cfg*)
l’IP dure pour PCI Express sont échantillonnés incorrectement dans le tissu FPGA.
Par conséquent, il est possible qu’une violation de la configuration ou de la durée de conservation se produise. Le logiciel Quartus Prime
ne signale pas la violation, car cette voie multi-cycle n’est pas limitée. Si un
une violation du timing se produit, le système peut blocage.
Pour Arria 10 périphériques, utilisez Quartus Prime 16.0.1 ou une version ultérieure. La couche de transaction
L’interface des signaux de l’espace de configuration est tenue pour huit coreclkout_hip
Cycles. Votre couche d’application RTL doit inclure du code pour échantillonner cette interface dans le
au milieu de la fenêtre à huit cycles. Voir l’exemple RTL ci-dessous :
//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
Pour Arria 10 périphériques, vous devez ajouter les contraintes de synchronisation suivantes dans votre Fichier SDC (Synposys Design Constraints).
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
Pour les périphériques Stratix V et Arria V GZ, vous devez ajouter le timing suivant contraintes de conception synposys (SDC) dans votre fichier.
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