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.
# 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 |