On 03/24/2020 12:24 AM, Lukas Haase wrote:
Hi Marcus,
I would have two possible solutions but both of them are non-trivial:
1. As you say, parallelism. For each of N supported timed commands, the
decoding of the timed commands is cloned
2. If the timed commands are enough clock cycles in the future, they can be
decoded immideately once they come in. For each type of register they set, they
set the following: value of the register. Clock cycle at which it should occur.
Then we would have something like:
reg [31:0] cycle_number; // how to handle overflow? commands can be a max
of 1/200e6 * 2^32 seconds in advance
always @(posedge clk) begin
cycle_number <= cycle_number + 1;
if cycle_number == when_to_set_phase_accumulator_register
phase_accumulator <= data_for_phase_accumulator;
if cycle_number == when_to_set_phase_increment_register
phase_increment <= data_for_phase_increment;
end
Right, but the timed-command FIFO handler doesn't really *KNOW* anything
about the semantics of the registers its setting, and indeed, given
the large variety of daughter-cards, and other "things" it probably
shouldn't *KNOW* too much about anything, because that, among other things,
makes the code MUCH harder to maintain, and occupies more room in the
limited-space FPGA.
Absolute phase coherence (with predictable/zero phase-offset) is, in
practice, incredibly hard to achieve--PARTICULARLY PHASE OFFSET.
Which is why most fielded RF systems work just fine with "wobbly"
phase-offset, with mechanisms to factor it out "at startup" (for whatever
definition of "start up" is appropriate).
I know it is hard to achieve and I know normal *comm* systems do not care.
BUT: There is a large class of practically relevent applications that require
TX/RX phase coherence: Ranging and radar.
Everything that that needs to deduce time of flight (=range) via carrier phase
shift.
If it's just one frequency we can again calibrate.
But to make systems robust, they use multiple frequencies and obtain phase
shifts from diverse (hopped) frequencies.
Yes, it's hard to implement but these systems do exist, have been built and
work.
Yup, those systems have hardware that "understands" all of the subtle
semantics of the application at hand.
(I am also aware that there are other options to implement these systems
outside of USRP/SDR context: a single PLL for both TX/RX with potential freq
dividers/multipliers, coupling transmitted signal harmonics back, bandpass
filter and use as RX LO etc).
The problem with the "marvelous generality" of an SDR solution (whether
it's USRP or something else) is that there are *specific* applications
that don't necessarily slide easily into the model of "marvelous
generality".
Your application seems to have two things that are sometimes hard to
achieve in a generic SDR:
o Rapid frequency hopping (RF synthesizers for rapid
frequency-hopping systems are often designed very differently than for
more-general systems).
o Predictable and reliable phase-offset across hops. [That is,
hop to X, hop to Y, come back to X, and have an expectation of the same
systemic
phase offset].
In other words: How would you implement such a ranging system with USRP?
Currently I only see two options that work but none of them are acceptable:
Option 1: Use analog only tuning. But this is not flexible because it only
works with integer-N tuning (poor resolution) and has huge settling timed
Option 2: Do everything (=hopping) in software on the host computer, e.g.
within gnuradio. But this requires unnecessary huge data rates (200MSsps)
Option 2 leaves you in a situation where the hardware isn't changing
across hops. I agree that it carries a heavy implementation burden on
the software side.
There's a 3rd option you didn't mention:
Implement application-specific "stuff" in the FPGA, using either the
RFNoC framework or "raw". RFNoC and the whole open-source FPGA code
were designed to allow that, and many Ettus customers do custom
things in the FPGA specifically because the as-shipped architecture doesn't
quite fit their application model. That is, as I'll re-iterate, an
attribute of highly-generalized systems--they have this natural tendency to
not deal well speciic "edge cases".
I hope that someone with better understanding of the timed-command FIFO
can chime in and tell me that I'm completely wrong.
Indeed much appreciated.
Thanks,
Lukas
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com