A
Andrew FPGA
Guest
We use SystemVerilog top level sims to verify a VHDL device under test
(its a 90kLUT FPGA). We attach the SV class based testbench hierarchy
to the DUT in the traditional manner, using virtual SV interfaces. The
DUT is VHDL, so I use an "SV wrapper module" to instance the DUT and
hookup the SV interfaces to the DUT pins. All rather conventional I
would think.
For simulation performance reasons, we have a need to remove a
specific module within the DUT. Easily done, but how I can attach the
top level testbench to this removed modules ports, so that I can drive
data into, and monitor data out of this removed module? I would love
to instance SV interfaces and then attach these to the removed modules
ports, but I have not figured out how to do this.
The removed module is a high speed serdes and SGMII module which takes
the FPGA pins and converts to the standard 802.3 GMII interface. I
would like to drive and monitor the GMII interface directly, removing
the need to execute the serdes/SGMII models.
After googling and thinking, here are the options/ideas I've come up
with:
1) SV bind. Bind a GMII SV interface into an empty shell of the SGMII/
Serdes model. My understanding is bind is "like" instantiating, so
I'll end up with an SV GMII interface inside the serdes model shell.
How do I get the top level testbench to reference this interface, so I
can pass it in as a virtual interface to the class based testbench
hierarchy? Its VHDL so can't use hierarchical notation?
2) Questasim "signal_spy". This gets me into the VHDL hierarchy, but
simulator specific so yucky.
3) Use a VHDL package with some global signals, which get included by
the serdes model shell. Then, how to drive these global signals from
an SV interface? Doesn't feel right.
4) Breakout the GMII signals to the VHDL top level. Use translate on/
off pragmas so these extra GMII signals on the DUT top level don't
exist at synthesis time. Then can attach these DUT top level signals
to an SV interface in the conventional way.
Any ideas on a cleaner way to do this? Would like to stay within SV/
VHDL rather than use simulator specific features like signal spy, etc.
Cheers
Andrew
Questasim 6.5b.
Lattice Synplify Pro 9.6
(its a 90kLUT FPGA). We attach the SV class based testbench hierarchy
to the DUT in the traditional manner, using virtual SV interfaces. The
DUT is VHDL, so I use an "SV wrapper module" to instance the DUT and
hookup the SV interfaces to the DUT pins. All rather conventional I
would think.
For simulation performance reasons, we have a need to remove a
specific module within the DUT. Easily done, but how I can attach the
top level testbench to this removed modules ports, so that I can drive
data into, and monitor data out of this removed module? I would love
to instance SV interfaces and then attach these to the removed modules
ports, but I have not figured out how to do this.
The removed module is a high speed serdes and SGMII module which takes
the FPGA pins and converts to the standard 802.3 GMII interface. I
would like to drive and monitor the GMII interface directly, removing
the need to execute the serdes/SGMII models.
After googling and thinking, here are the options/ideas I've come up
with:
1) SV bind. Bind a GMII SV interface into an empty shell of the SGMII/
Serdes model. My understanding is bind is "like" instantiating, so
I'll end up with an SV GMII interface inside the serdes model shell.
How do I get the top level testbench to reference this interface, so I
can pass it in as a virtual interface to the class based testbench
hierarchy? Its VHDL so can't use hierarchical notation?
2) Questasim "signal_spy". This gets me into the VHDL hierarchy, but
simulator specific so yucky.
3) Use a VHDL package with some global signals, which get included by
the serdes model shell. Then, how to drive these global signals from
an SV interface? Doesn't feel right.
4) Breakout the GMII signals to the VHDL top level. Use translate on/
off pragmas so these extra GMII signals on the DUT top level don't
exist at synthesis time. Then can attach these DUT top level signals
to an SV interface in the conventional way.
Any ideas on a cleaner way to do this? Would like to stay within SV/
VHDL rather than use simulator specific features like signal spy, etc.
Cheers
Andrew
Questasim 6.5b.
Lattice Synplify Pro 9.6