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