[hpsdr] USB-protocol 1.27
Joe Martin K5SO
k5so at valornet.com
Tue Jan 25 07:28:14 PST 2011
Hi Alfred,
As I commented to you in an off-reflector message earlier, in the
present FPGA code there is no distinction made as to whether the
multiple receivers exist on a single Mercury board or on multiple
Mercury boards. This is an issue that I brought to Phil's attention
recently, also in a private email, .
The short answer to your question is that in my Mercury v6.3 FPGA code
two receivers are implemented in both receiver boards but only one
receiver is actually used in each board. So the interleaved byte data
stream over the USB port from Ozy (Metis) to the PC consists of
sync, sync, sync, C1, C2, C3, C4, C5, I1c, I1b, I1a, Q1c, Q1b, Q1a,
I2c, I2b, I2a, Q2c, Q2b, Q2c, mic-b, mica, I1c, I1b, I1a, etc. to fill
a 512-byte block,
where sync= 0x7f,
C1-C5 are the command and control bytes,
I1c-I1a is the three byte (24-bit) I value from the first receiver on
Mercury 1,
Q1c-Q1a is the three-byte Q value from the first receiver on Mercury 1,
I2c-I2a is the three-byte (24-bit) I value from the first receiver on
Mercury 2,
Q2c-Q2a is the three byte (24-bit) Q value from the first receiver on
Mercury 2,
mic-b and mic-a are the two-byte transmit audio (16-bit) value from
Penelope to the PC.
IQ info from the second receivers on both Mercury boards are not used.
This current situation, of course, is very inefficient in terms of
FPGA coding in the Mercury boards since the second receiver logic on
each Mercury board is completely unused. The situation becomes even
worse when three receivers are implemented, as I'm presently doing
with three Mercury boards for three-antenna diversity operation.
Implementing three receivers with three Mercury boards results in
coding nine total receivers with two receivers on each Mercury board
not being used at all. FYI, I am working on a scheme to remedy this
current situation but perhaps the expert Verilog coders will address
the issue formally soon to provide an "official" version that will be
more acceptable for the community, now that the issue is becoming more
and more relevant to folks.
In defense of the original coding, the initial Verilog programmers did
not have multiple Mercury boards to work with and to test with when
writing the original Verilog code and some of the issues involved are
quite subtle (e.g., the synchronization of the IQ streams to each
other, etc) and don't really show up until multiple Mercury boards are
actually used. The original code is a fine first effort, to be sure,
even though it contains some unforeseen problems. The existing
Verilog code is an amazing effort with respect to implementing
multiple receivers, in my view, and I greatly appreciate the work
done by them! Their next iteration will be even better, I'm sure.
73, Joe K5SO
1295969294.0
More information about the Hpsdr
mailing list