cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
betontalpfa
Explorer
Explorer
776 Views
Registered: ‎10-12-2018

AXI-Stream VIP: SIGNAL_SET: Miscompare: lhs: 0x1a rhs: 0x1b

Jump to solution

Hi,

My design contains an Aurora 64B66B IP. I created a loopback for simulation with two AXI-Stream VIP (a master for TX and a slave for RX). I tries to compare the sent and the recieved transactions but I got the following error: AXI-Stream VIP: SIGNAL_SET: Miscompare: lhs: 0x1a rhs: 0x1b

I got this because the RX Aurora has no tready signal, and therefore the VIP has no tready. Here is a snippet from axi4stream_vip_pkg.sv

parameter XIL_AXI4STREAM_SIGSET_READY     = 8'b00000001;
parameter XIL_AXI4STREAM_SIGSET_DATA      = 8'b00000010;
parameter XIL_AXI4STREAM_SIGSET_STRB      = 8'b00000100;
parameter XIL_AXI4STREAM_SIGSET_KEEP      = 8'b00001000;
parameter XIL_AXI4STREAM_SIGSET_LAST      = 8'b00010000;
parameter XIL_AXI4STREAM_SIGSET_ID        = 8'b00100000;
parameter XIL_AXI4STREAM_SIGSET_DEST      = 8'b01000000;
parameter XIL_AXI4STREAM_SIGSET_USER      = 8'b10000000;
parameter XIL_AXI4STREAM_SIGSET_ALL       = 8'b11111111;

So I know that there is a mismatch in signal set (the tready) between the master and the slave, but how can I tell the to do_compare() method to ignore this miscompare?

(A workaround seems to generate tready on both side, just assert high always on slave side.)

 

0 Kudos
1 Solution

Accepted Solutions
betontalpfa
Explorer
Explorer
707 Views
Registered: ‎10-12-2018

Hi,

Two working solution:

  1. Setup AXI-Stream VIP with always asserted tready (as I suggested earlyer)
  2. Set signal before do_compare (as @calebd suggested)

 

Setup AXI-Stream VIP with always asserted tready

Enable has tready property (on both rx and tx VIP) (during generating the VIP)

Then tell the agent to assert the tready always (in testcase):

axis_vip_slave_slv_t s_axis_agent;
axi4stream_ready_gen ready_gen;
// start slave agent s_axis_agent.start_slave(); // Generate NO backpressure because there is no tready on Aurora ready_gen = s_axis_agent.driver.create_ready("ready_gen00"); ready_gen.set_ready_policy(XIL_AXI4STREAM_READY_GEN_NO_BACKPRESSURE); s_axis_agent.driver.send_tready(ready_gen);

Set signal before do_compare

Disable has tready property (on rx side) (during generating the VIP)

Then set the sigset before (each) do_compare():

axi4stream_monitor_transaction mst_tr;  // tx transaction
axi4stream_monitor_transaction slv_tr;   // rx transaction (no tready)

mst_tr.set_signal_set(slv_tr.get_signal_set());
slv_tr.do_compare(mst_tr)

 

 

 

View solution in original post

0 Kudos
2 Replies
calebd
Moderator
Moderator
728 Views
Registered: ‎01-09-2019

Hello @betontalpfa 

Your workaround of sending TREADY for your entire transaction does seem to be AXI-compliant so that could be one way to get your comparison to work.  Otherwise could you just do a simple bitmask to only compare the first 7 bits and the last bit be a don't care (or wherever the bit is for tready)?.  For instance some pseudo-C code:

if ((lhs | 8'b00000001) == (rhs | 8'b00000001) {
  printf("They equal, henceforth party");
} else {
  print("Not today, but maybe later");
}

Or am I misinterpreting your question?  With the do_compare() function you might need to change the signal before sending it to the function, but the bitmasking should still work.

Thanks,

Caleb


------------------------------------------------------------------------------------------------

Don’t forget to reply, kudo, and accept as solution.

If starting with Versal take a look at our Versal Design Process Hub and our
Versal Blogs

------------------------------------------------------------------------------------------------
0 Kudos
betontalpfa
Explorer
Explorer
708 Views
Registered: ‎10-12-2018

Hi,

Two working solution:

  1. Setup AXI-Stream VIP with always asserted tready (as I suggested earlyer)
  2. Set signal before do_compare (as @calebd suggested)

 

Setup AXI-Stream VIP with always asserted tready

Enable has tready property (on both rx and tx VIP) (during generating the VIP)

Then tell the agent to assert the tready always (in testcase):

axis_vip_slave_slv_t s_axis_agent;
axi4stream_ready_gen ready_gen;
// start slave agent s_axis_agent.start_slave(); // Generate NO backpressure because there is no tready on Aurora ready_gen = s_axis_agent.driver.create_ready("ready_gen00"); ready_gen.set_ready_policy(XIL_AXI4STREAM_READY_GEN_NO_BACKPRESSURE); s_axis_agent.driver.send_tready(ready_gen);

Set signal before do_compare

Disable has tready property (on rx side) (during generating the VIP)

Then set the sigset before (each) do_compare():

axi4stream_monitor_transaction mst_tr;  // tx transaction
axi4stream_monitor_transaction slv_tr;   // rx transaction (no tready)

mst_tr.set_signal_set(slv_tr.get_signal_set());
slv_tr.do_compare(mst_tr)

 

 

 

View solution in original post

0 Kudos