I just read a bit more about the "Sideband-At-End" signal, and it could
indeed be the issue. However, I don't see this signal (nor |tlength|,
|ttimestamp|, |has_time|, |teov|, or |teob|) in my current block
definition. This definition was auto-generated by /rfnoc_modtool/,
similar to the one in the gain example. Do you know how I can enable or
configure this Sideband-At-End in UHD 4.8?
You're also right — I added a custom |is_last_sample| signal to mark the
last sample of my OFDM frame, in case it doesn’t align with a true end
symbol in RFNoC.
If needed, here’s my current block definition:
https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency/rfnoc/blocks/schmidl_cox.yml
Quentin
On 4/17/25 18:40, Rob Kossler wrote:
Vous n’obtenez pas souvent d’e-mail à partir de rkoss...@nd.edu.
Pourquoi c’est important <https://aka.ms/LearnAboutSenderIdentification>
OK. The AXI-Stream Data (simple) interface is the easiest for this
case in my opinion. Are you using "Sideband-At-End" in order to have
the "tlength" automatically calculated?
You need to set "tlast" like you mentioned. This is critical and not
always easy. Remember that the CHDR packet can only be about 2000
samples whereas an OFDM packet might be longer. So, your idea about
preserving the tlast from the input stream is probably needed. You
also probably want to preserve teob from the input unless you are also
detecting your own end of burst in which case you need logic to set
this on the final packet and you need to set tlast on the last sample
because the input packets will likely not have tlast set on this sample.
Note that in the past I have used "axi_rate_change" in a block such as
yours (my block was a pulse detection block based on power) because in
addition to handling a true rate change (which you don't need), it
also takes care of re-packetizing the data. This allows your own
logic to not worry about RFNoC packets. But, switching to use this
module might be more of a headache than just handling the RFNoC
packets with your own logic.
For the question you asked about receiving a new CHDR packet if an
output packet has not been produced, I think the answer is Yes, this
is no problem.
Rob
On Thu, Apr 17, 2025 at 12:16 PM Quentin Prieels
<quentin.prie...@student.uclouvain.be> wrote:
Hi Rob,
I'm not sure. I also tried forwarding the |tlast| signal of the
original |tdata| samples to force the system to send a CHDR
packet—even if my OFDM packet wasn't finished yet—but it doesn’t
seem to solve the issue.
Another question I’ve been asking myself is:/does RFNoC allow a
block to receive a new incoming CHDR packet if it hasn’t yet
produced an outgoing packet/?
I'm using the AXI-Stream Data (Simple) interface, so I assume the
NoC shell handles packet manipulation and length. I don't see
where I could modify this behavior...
If you have any ideas or insights, I’d be happy to investigate
further.
Best regards,
Quentin
On 4/17/25 17:58, Rob Kossler wrote:
Vous n’obtenez pas souvent d’e-mail à partir de rkoss...@nd.edu.
Pourquoi c’est important
<https://aka.ms/LearnAboutSenderIdentification>
Hi Quentin,
Perhaps your issue is related to the 'length' parameter of the
RFNoC packet? If you are not correcting the packet length based
on the number of samples you are dropping, then you will get
ill-formed packets coming out. Do you think that this could be
the issue?
Rob
On Thu, Apr 17, 2025 at 11:40 AM Quentin Prieels
<quentin.prie...@student.uclouvain.be> wrote:
Hello everyone,
I'm currently implementing a Schmidl & Cox OOT module on a
USRP X310 as part of my master's thesis. (For those
interested, the code is available here
<https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/tree/latency>
(https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency
<https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency>).)
The purpose of this block is to detect the beginning of an
OFDM frame — specifically, just after the Schmidl & Cox
preamble. I want the block to forward *only* the "valid"
samples (i.e., those that are part of the actual OFDM frame).
So when I call |rx_stream->recv()|, only actual data packets
should be received by my UHD application.
My first idea was to control the |tvalid| signal of the
AXI-Stream interface: setting it to |0| when the data was not
a "valid" OFDM sample, and asserting it (|1|) only when the
data was valid. However, this seems to cause some kind of
deadlock. My UHD application always times out and receives no
data. Interestingly, when I output zero-valued samples
instead of deasserting the |tvalid| signal, I can see that my
synchronization mechanism is working as expected. This
suggests the issue likely lies in my use of AXI signals or a
misunderstanding of the RFNoC protocol.
_Note_: my configured SPP (samples per packet, here 200) is
smaller than the length of the actual OFDM frame, which
consists of thousands of complex samples.
So here's my main question:
Given a continuous stream of data (currently configured as
packets with 200 samples each, where every packet is valid),
how can I output *only a subset* of this stream — a specific
sequence of continuous samples (potentially spread across
multiple packets) — such that only this valid subset is
received by the UHD application? Alternatively, how can I
mark only part of the stream as valid for the receiver, while
discarding the rest?
(For those interested in the code, this behavior corresponds
to when |output_select| is set to |2'b01| in the following
module: detector.sv
<https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency/fpga/ofdm/rfnoc_block_schmidl_cox/detector.sv>
(https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency/fpga/ofdm/rfnoc_block_schmidl_cox/detector.sv
<https://github.com/quentinprieels/TFE25-462-rnfoc-ofdm/blob/latency/fpga/ofdm/rfnoc_block_schmidl_cox/detector.sv>)
, which controls forwarding of input data only when in the
|FORWARDING| state.)
Thank you all for your help,
Quentin
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com