Discussion and technical support related to USRP, UHD, RFNoC
View all threadsDear all,
I have an issue with a testbench for a custom RFNoC block.
The testbench template is taken from host/example/rfnoc-example
and generated with rfnoc_create_verilog.py,
as stated in the wiki [1].
Running "make testbenches" completes without issue.
However, running the testbench with GUI ("make testbenches GUI=1")
failed with "FATAL_ERROR: Vivado Simulator kernel has discovered
an exceptional condition from which it cannot recover" during the wave
generation (1%), making the soft unusable.
Files: Block [2], testbench [3], log [4].
Version: UHD 4.0, Vivado 2019.1.
I would like to simulate signal waveforms to check latency/timing.
Any idea how to fix or to check latency/timing?
[1] https://kb.ettus.com/Getting_Started_with_RFNoC_in_UHD_4.0#Generating_Your_Block_Using_the_ModTool
[2] https://paste.debian.net/hidden/5fa3b59e/
[3] https://paste.debian.net/hidden/281ffb17/
[4] https://paste.debian.net/hidden/db686780/
Cédric Hannotier
Hi Cedric,
Does the issue go away if you comment out test.start_tb(...) and all
instances of test.start_test(...) and test.end_test() in the testbench?
Jonathon
On Thu, Jan 7, 2021, 12:49 Cédric Hannotier via USRP-users <
usrp-users@lists.ettus.com> wrote:
Dear all,
I have an issue with a testbench for a custom RFNoC block.
The testbench template is taken from host/example/rfnoc-example
and generated with rfnoc_create_verilog.py,
as stated in the wiki [1].
Running "make testbenches" completes without issue.
However, running the testbench with GUI ("make testbenches GUI=1")
failed with "FATAL_ERROR: Vivado Simulator kernel has discovered
an exceptional condition from which it cannot recover" during the wave
generation (1%), making the soft unusable.
Files: Block [2], testbench [3], log [4].
Version: UHD 4.0, Vivado 2019.1.
I would like to simulate signal waveforms to check latency/timing.
Any idea how to fix or to check latency/timing?
[1]
https://kb.ettus.com/Getting_Started_with_RFNoC_in_UHD_4.0#Generating_Your_Block_Using_the_ModTool
[2] https://paste.debian.net/hidden/5fa3b59e/
[3] https://paste.debian.net/hidden/281ffb17/
[4] https://paste.debian.net/hidden/db686780/
Cédric Hannotier
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
On 11/01/21 21:40, Jonathon Pendlum wrote:
Hi Cedric,
Hi Jonathon,
Does the issue go away if you comment out test.start_tb(...) and all
instances of test.start_test(...) and test.end_test() in the testbench?
If I comment out test.{start,end}_tb, it fails with:
"Fatal: The connected block has an incompatible backend interface".
The testbench is unusable in this case (whatever the GUI value).
If I comment out test.{start,end}_test, it prints:
"Fatal: No test running",
but proceed to run the full testbench (without reporting test status).
With GUI=1, I get the same error message than previously:
"FATAL_ERROR: Vivado Simulator kernel has discovered
an exceptional condition from which it cannot recover"
Cédric Hannotier
Hi Cedric,
"Fatal: The connected block has an incompatible backend interface".
Try adding a short delay, such as #1 or @posedge( at the start of the
testbench to get past this.
Jonathon
On Tue, Jan 12, 2021 at 1:04 AM Cédric Hannotier cedric.hannotier@ulb.be
wrote:
On 11/01/21 21:40, Jonathon Pendlum wrote:
Hi Cedric,
Hi Jonathon,
Does the issue go away if you comment out test.start_tb(...) and all
instances of test.start_test(...) and test.end_test() in the testbench?
If I comment out test.{start,end}_tb, it fails with:
"Fatal: The connected block has an incompatible backend interface".
The testbench is unusable in this case (whatever the GUI value).
If I comment out test.{start,end}_test, it prints:
"Fatal: No test running",
but proceed to run the full testbench (without reporting test status).
With GUI=1, I get the same error message than previously:
"FATAL_ERROR: Vivado Simulator kernel has discovered
an exceptional condition from which it cannot recover"
Cédric Hannotier
On 12/01/21 13:42, Jonathon Pendlum via USRP-users wrote:
Hi Cedric,
Hi Jonathon,
"Fatal: The connected block has an incompatible backend interface".
Try adding a short delay, such as #1 or @posedge( at the start of the
testbench to get past this.
Thanks for the workaround, it works!
However, it has some side effects.
Doing
//test.start_tb
#1
...
//test.end_tb
or
test.start_tb
...
//test.end_tb
give the same result.
Indeed, the issue is with test.end_tb finishing the simulation.
It is fine in cli, but not in GUI, since Vivado is generating waves.
Commenting out test.end_tb solves the issue with GUI mode,
but then the simulation does not stop in cli mode after
all tests are completed (it only stops after 10ms).
Furthermore, I loose the summary at the end (time elapsed,
#passed/failed tests, etc.)
Is there a way to reconcile both modes (cli & GUI) without editing
my testbench every time I need to switch between these two modes?
Cédric Hannotier
Hi Cédric,
You can probably just call $finish() instead of test.end_tb() to stop the
simulation in both CLI and GUI modes. If you want the summary at the end,
take a look at what end_tb() does in PkgTestExec.sv. Also, note that the
test object isn't required. You can remove all the test calls from your
code and just use SystemVerilog assertions instead if you prefer.
Wade
On Wed, Jan 13, 2021 at 4:58 AM Cédric Hannotier via USRP-users <
usrp-users@lists.ettus.com> wrote:
On 12/01/21 13:42, Jonathon Pendlum via USRP-users wrote:
Hi Cedric,
Hi Jonathon,
"Fatal: The connected block has an incompatible backend interface".
Try adding a short delay, such as #1 or @posedge( at the start of the
testbench to get past this.
Thanks for the workaround, it works!
However, it has some side effects.
Doing
//test.start_tb
#1
...
//test.end_tb
or
test.start_tb
...
//test.end_tb
give the same result.
Indeed, the issue is with test.end_tb finishing the simulation.
It is fine in cli, but not in GUI, since Vivado is generating waves.
Commenting out test.end_tb solves the issue with GUI mode,
but then the simulation does not stop in cli mode after
all tests are completed (it only stops after 10ms).
Furthermore, I loose the summary at the end (time elapsed,
#passed/failed tests, etc.)
Is there a way to reconcile both modes (cli & GUI) without editing
my testbench every time I need to switch between these two modes?
Cédric Hannotier
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
Hi Wade,
On 13/01/21 10:00, Wade Fife wrote:
On Wed, Jan 13, 2021 at 4:58 AM Cédric Hannotier via USRP-users <
usrp-users@lists.ettus.com> wrote:
Is there a way to reconcile both modes (cli & GUI) without editing
my testbench every time I need to switch between these two modes?
You can probably just call $finish() instead of test.end_tb() to stop the
simulation in both CLI and GUI modes. If you want the summary at the end,
take a look at what end_tb() does in PkgTestExec.sv.
Indeed!
After reading PkgTestExec.sv, I found something that reconcile both:
test.start_tb()
...
test.end_tb(0) // will not call $finish()
$finish()
Cédric Hannotier