Discussion and technical support related to USRP, UHD, RFNoC
View all threadsI had been looking at /mboards/0/link_max_rate to determine if an X300 was
connected via 10 GigE or 1 GigE. However it seems like sometime between when
that was implemented for the X300 (
https://github.com/EttusResearch/uhd/commit/6a72c16ee909af95b6965f26fb588a29
485ef414 ) and now (
https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0af52c
edec40/host/lib/usrp/x300/x300_impl.cpp#L676 ) that was changed to always
return the 10 G rate even when connected via 1 G. Is there another way to
determine how an X300 is connected?
-Nathan
Hello Nathan,
I think you are referring only to the values that are set in the creation
of the "max_link_branch" of the property tree. In one version of the code
(the one you highlighted at [1]) has only the branch called "link_max_rate"
and this one is created and set to either the PCIE max rate or the 10G max
rate with the following statements
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_PCIE);
//L396
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_10GIGE);
//L462
then, depending on the FPGA image that is loaded, this same branch is set
to different values for the max rate, including the 1G Ethernet:
_tree->access<double>("/mboards/"+boost::lexical_cast<std::string>(mb_index)
/ "link_max_rate").set(X300_MAX_RATE_1GIGE); //L1140
For the other version (highlighted at [2]), however, this last assignment
is done a little bit differently, but keeping the same logic [2.a].
Now, it is not clear to me if your question raises an unexpected behavior
of if you are only asking about the logic behind scenes. I mean, are
retrieving this value using different FPGA images and always getting the
10G maximum link rate? or if you are only asking about the how this is done
in the code? On a quick view, the branch value is being set to the correct
max rate depending on the FPGA image that you are loading into the device,
which is the same logic in the two mentioned versions.
Regards,
-Nicolas
[1]
https://github.com/EttusResearch/uhd/blob/6a72c16ee909af95b6965f26fb588a29485ef414/host/lib/usrp/x300/x300_impl.cpp
[2]
https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/x300_impl.cpp
[2.a]
https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/x300_impl.cpp#L1202
On Fri, Jul 28, 2017 at 1:03 AM, Perelman, Nathan via USRP-users <
usrp-users@lists.ettus.com> wrote:
I had been looking at /mboards/0/link_max_rate to determine if an X300 was
connected via 10 GigE or 1 GigE. However it seems like sometime between
when that was implemented for the X300 ( https://github.com/
EttusResearch/uhd/commit/6a72c16ee909af95b6965f26fb588a29485ef414 ) and
now ( https://github.com/EttusResearch/uhd/blob/
7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/
x300_impl.cpp#L676 ) that was changed to always return the 10 G rate even
when connected via 1 G. Is there another way to determine how an X300 is
connected?
-Nathan
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
Using the HG image I am seeing a rate greater than 1 billion bytes/second even when connected via 1G (see below). This is with UHD 3.10.1.1. I had missed the part where it does set the rate to the 1 Gig constant in the current code. Looking at the code I think this line might be wrong? https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/x300_impl.hpp#L86 . Shouldn’t that be 1e9 for 1 GigE?
$ uhd_usrp_probe --args addr=192.168.20.2 --double /mboards/0/link_max_rate
linux; GNU C++ version 5.3.1 20160406 (Red Hat 5.3.1-6); Boost_106000; UHD_003.010.001.001-0-unknown
-- X300 initialization sequence...
-- Determining maximum frame size... 1472 bytes.
-- Setup basic communication...
-- Loading values from EEPROM...
-- Setup RF frontend clocking...
-- Radio 1x clock:200
-- Detecting internal GPSDO.... Found an internal GPSDO: LC_XO, Firmware Rev 0.929a
-- [DMA FIFO] Running BIST for FIFO 0... pass (Throughput: 1172.9MB/s)
-- [DMA FIFO] Running BIST for FIFO 1... pass (Throughput: 1184.8MB/s)
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass
1.21333e+09
-Nathan
From: Nicolas Cuervo [mailto:nicolas.cuervo@ettus.com]
Sent: Monday, August 7, 2017 7:42 AM
To: Perelman, Nathan nperelman@LGSInnovations.com
Cc: usrp-users usrp-users@lists.ettus.com
Subject: Re: [USRP-users] Determining if an X300 is connected via 10 GigE or 1 GigE
Hello Nathan,
I think you are referring only to the values that are set in the creation of the "max_link_branch" of the property tree. In one version of the code (the one you highlighted at [1]) has only the branch called "link_max_rate" and this one is created and set to either the PCIE max rate or the 10G max rate with the following statements
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_PCIE); //L396
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_10GIGE); //L462
then, depending on the FPGA image that is loaded, this same branch is set to different values for the max rate, including the 1G Ethernet:
_tree->access<double>("/mboards/"+boost::lexical_cast<std::string>(mb_index) / "link_max_rate").set(X300_MAX_RATE_1GIGE); //L1140
For the other version (highlighted at [2]), however, this last assignment is done a little bit differently, but keeping the same logic [2.a].
Now, it is not clear to me if your question raises an unexpected behavior of if you are only asking about the logic behind scenes. I mean, are retrieving this value using different FPGA images and always getting the 10G maximum link rate? or if you are only asking about the how this is done in the code? On a quick view, the branch value is being set to the correct max rate depending on the FPGA image that you are loading into the device, which is the same logic in the two mentioned versions.
Regards,
-Nicolas
On Fri, Jul 28, 2017 at 1:03 AM, Perelman, Nathan via USRP-users usrp-users@lists.ettus.com wrote:
I had been looking at /mboards/0/link_max_rate to determine if an X300 was connected via 10 GigE or 1 GigE. However it seems like sometime between when that was implemented for the X300 ( https://github.com/EttusResearch/uhd/commit/6a72c16ee909af95b6965f26fb588a29485ef414 ) and now ( https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/x300_impl.cpp#L676 ) that was changed to always return the 10 G rate even when connected via 1 G. Is there another way to determine how an X300 is connected?
-Nathan
USRP-users mailing list
USRP-users@lists.ettus.com mailto:USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
Hi Nathan,
we believe you are right. Nice catch! The line you suggested as culprit is
already corrected and merged and will be pushed public in the near future.
Thanks!
-N
On Mon, Aug 7, 2017 at 5:07 PM, Perelman, Nathan <
nperelman@lgsinnovations.com> wrote:
Using the HG image I am seeing a rate greater than 1 billion bytes/second
even when connected via 1G (see below). This is with UHD 3.10.1.1. I had
missed the part where it does set the rate to the 1 Gig constant in the
current code. Looking at the code I think this line might be wrong?
https://github.com/EttusResearch/uhd/blob/7ac01c7f979aab8fac5e62f596ff0a
f52cedec40/host/lib/usrp/x300/x300_impl.hpp#L86 . Shouldn’t that be 1e9
for 1 GigE?
$ uhd_usrp_probe --args addr=192.168.20.2 --double /mboards/0/link_max_rate
linux; GNU C++ version 5.3.1 20160406 (Red Hat 5.3.1-6); Boost_106000;
UHD_003.010.001.001-0-unknown
-- X300 initialization sequence...
-- Determining maximum frame size... 1472 bytes.
-- Setup basic communication...
-- Loading values from EEPROM...
-- Setup RF frontend clocking...
-- Radio 1x clock:200
-- Detecting internal GPSDO.... Found an internal GPSDO: LC_XO, Firmware
Rev 0.929a
-- [DMA FIFO] Running BIST for FIFO 0... pass (Throughput: 1172.9MB/s)
-- [DMA FIFO] Running BIST for FIFO 1... pass (Throughput: 1184.8MB/s)
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass
1.21333e+09
-Nathan
From: Nicolas Cuervo [mailto:nicolas.cuervo@ettus.com]
Sent: Monday, August 7, 2017 7:42 AM
To: Perelman, Nathan nperelman@LGSInnovations.com
Cc: usrp-users usrp-users@lists.ettus.com
Subject: Re: [USRP-users] Determining if an X300 is connected via 10
GigE or 1 GigE
Hello Nathan,
I think you are referring only to the values that are set in the creation
of the "max_link_branch" of the property tree. In one version of the code
(the one you highlighted at [1]) has only the branch called "link_max_rate"
and this one is created and set to either the PCIE max rate or the 10G max
rate with the following statements
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_PCIE);
//L396
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_10GIGE);
//L462
then, depending on the FPGA image that is loaded, this same branch is set
to different values for the max rate, including the 1G Ethernet:
_tree->access<double>("/mboards/"+boost::lexical_cast<std::string>(mb_index)
/ "link_max_rate").set(X300_MAX_RATE_1GIGE); //L1140
For the other version (highlighted at [2]), however, this last assignment
is done a little bit differently, but keeping the same logic [2.a].
Now, it is not clear to me if your question raises an unexpected behavior
of if you are only asking about the logic behind scenes. I mean, are
retrieving this value using different FPGA images and always getting the
10G maximum link rate? or if you are only asking about the how this is done
in the code? On a quick view, the branch value is being set to the correct
max rate depending on the FPGA image that you are loading into the device,
which is the same logic in the two mentioned versions.
Regards,
-Nicolas
[1] https://github.com/EttusResearch/uhd/blob/
6a72c16ee909af95b6965f26fb588a29485ef414/host/lib/usrp/x300/x300_impl.cpp
[2] https://github.com/EttusResearch/uhd/blob/
7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/x300_impl.cpp
[2.a] https://github.com/EttusResearch/uhd/blob/
7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/
x300_impl.cpp#L1202
On Fri, Jul 28, 2017 at 1:03 AM, Perelman, Nathan via USRP-users <
usrp-users@lists.ettus.com> wrote:
I had been looking at /mboards/0/link_max_rate to determine if an X300 was
connected via 10 GigE or 1 GigE. However it seems like sometime between
when that was implemented for the X300 ( https://github.com/
EttusResearch/uhd/commit/6a72c16ee909af95b6965f26fb588a29485ef414 ) and
now ( https://github.com/EttusResearch/uhd/blob/
7ac01c7f979aab8fac5e62f596ff0af52cedec40/host/lib/usrp/x300/
x300_impl.cpp#L676 ) that was changed to always return the 10 G rate even
when connected via 1 G. Is there another way to determine how an X300 is
connected?
-Nathan
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com