AR# 31649

Endpoint Block Plus Wrapper v1.9 for PCI Express - turn_off_upper_lanes Perl Script incorrect for GTX (FXT/TXT)

Description

Known Issue: v1.9, v1.8

For VHDL x8 Core simulation with the provided downstream port, a perl script is required to modify the generated simulation model to make it compatible with the provided core. The script modifies the simulation netlist and turns off SIM_RECEIVER_DETECT_PASS0(1) for the four upper lanes (GTX4 and GTX6).

The problem is that it is looking for GTP_DUAL instances instead of GTX_DUAL instances; and for GTX, it is SIM_RECEIVER_DETECT_PASS_0 instead of SIM_RECEIVER_DETECT_PASS0.

The correct script is below.

NOTE: You must put the generated file name where it says "<file name>". This is the name of the core entered in the CORE Generator GUI.

Solution

# The purpose of this script is to resolve a simulation issue that occurs when

# using the VHDL x8 pcie_blk_plus core in conjunction with the x4 downstream

# port that is provided along with the example testbench. This script hacks the

# x8 endpoint_blk_plus_v1_8fx.vhd core netlist and turns off SIM_RECEIVER_DETECT_PASS0(1)

# for the four upper lanes (GTX4 and GTX6). This is required so that the x4

# downstream port will correctly simulate in conjunction with the x8 core. This

# script is only being used for the x8 core configuration and only for the VHDL

# flow. The output of this file is <core name>..vhd. The original

# source file <core name>..vhd is left unchanged. Customers who intend to

# simulate the x8 VHDL pcie_blk_plus core with their own x8 downtream port should use the

# original source file <core name>.vhd and should not use this script to generate

# a modified core netlist.

$infile = '../../../<core name>.vhd';

$outfile = '../../../<core name>..vhd';

open(INFILE, $infile);

open(OUTFILE, ">$outfile");

@lines = <INFILE>;

close(INFILE);

$GTX4_found = 0;

$GTX6_found = 0;

foreach $_ (@lines)

{

if (/GTD_4_GT_i : GTX_DUAL/) {

print OUTFILE $_;

$GTX4_found = 1;

}

elsif (($GTX4_found == 1) && (/SIM_RECEIVER_DETECT_PASS_0/)) {

s/TRUE/FALSE/;

print OUTFILE $_;

}

elsif (($GTX4_found == 1) && (/SIM_RECEIVER_DETECT_PASS_1/)) {

s/TRUE/FALSE/;

print OUTFILE $_;

}

elsif (($GTX4_found == 1) && (/port map/)) {

print OUTFILE $_;

$GTX4_found = 0;

}

elsif (/GTD_6_GT_i : GTX_DUAL/) {

print OUTFILE $_;

$GTX6_found = 1;

}

elsif (($GTX6_found == 1) && (/SIM_RECEIVER_DETECT_PASS_0/)) {

s/TRUE/FALSE/;

print OUTFILE $_;

}

elsif (($GTX6_found == 1) && (/SIM_RECEIVER_DETECT_PASS_1/)) {

s/TRUE/FALSE/;

print OUTFILE $_;

}

elsif (($GTX6_found == 1) && (/port map/)) {

print OUTFILE $_;

$GTX6_found = 0;

}

else {

print OUTFILE $_;

}

}

close(OUTFILE);

Revision History

09/12/2008 - Initial Release

AR# 31649
Date 12/15/2012
Status Active
Type General Article