usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

UHD 4.0 RFNoC testbench throws fatal error with GUI xsim

CH
Cédric Hannotier
Thu, Jan 7, 2021 5:49 PM

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/

Regards

Cédric Hannotier

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/ Regards -- Cédric Hannotier
JP
Jonathon Pendlum
Tue, Jan 12, 2021 2:40 AM

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/

Regards

Cédric Hannotier


USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

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/ > > Regards > -- > > Cédric Hannotier > > _______________________________________________ > USRP-users mailing list > USRP-users@lists.ettus.com > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >
CH
Cédric Hannotier
Tue, Jan 12, 2021 6:04 AM

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"

Regards

Cédric Hannotier

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" Regards -- Cédric Hannotier
JP
Jonathon Pendlum
Tue, Jan 12, 2021 6:42 PM

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"

Regards

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" > > Regards > -- > > Cédric Hannotier >
CH
Cédric Hannotier
Wed, Jan 13, 2021 10:58 AM

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?

Regards

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? Regards -- Cédric Hannotier
WF
Wade Fife
Wed, Jan 13, 2021 4:00 PM

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?

Regards

Cédric Hannotier


USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

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? > > Regards > -- > > Cédric Hannotier > > _______________________________________________ > USRP-users mailing list > USRP-users@lists.ettus.com > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >
CH
Cédric Hannotier
Wed, Jan 13, 2021 5:07 PM

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()

Thanks!

Cédric Hannotier

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() Thanks! -- Cédric Hannotier