[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:03.96,0:00:08.67,Default,,0000,0000,0000,,[Music] Dialogue: 0,0:00:08.67,0:00:21.90,Default,,0000,0000,0000,,Herald: Has anyone in here ever worked\Nwith libusb or PI USB? Hands up. Okay. Who Dialogue: 0,0:00:21.90,0:00:32.17,Default,,0000,0000,0000,,also thinks USB is a pain? {\i1}laughs{\i0} Okay.\NSergey and Alexander were here back in at Dialogue: 0,0:00:32.17,0:00:38.77,Default,,0000,0000,0000,,the 26C3, that's a long time ago. I think\Nit was back in Berlin, and back then they Dialogue: 0,0:00:38.77,0:00:45.12,Default,,0000,0000,0000,,presented their first homemade, or not\Nhomemade, SDR, software-defined radio. Dialogue: 0,0:00:45.12,0:00:49.44,Default,,0000,0000,0000,,This year they are back again and they\Nwant to show us how they implemented Dialogue: 0,0:00:49.44,0:00:55.42,Default,,0000,0000,0000,,another one, using an FPGA, and to\Ncommunicate with it they used PCI Express. Dialogue: 0,0:00:55.42,0:01:01.59,Default,,0000,0000,0000,,So I think if you thought USB was a pain,\Nlet's see what they can tell us about PCI Dialogue: 0,0:01:01.59,0:01:06.69,Default,,0000,0000,0000,,Express. A warm round of applause for\NAlexander and Sergey for building a high Dialogue: 0,0:01:06.69,0:01:12.43,Default,,0000,0000,0000,,throughput, low latency, PCIe-based\Nsoftware-defined radio Dialogue: 0,0:01:12.43,0:01:20.22,Default,,0000,0000,0000,,[Applause]\NAlexander Chemeris: Hi everyone, good Dialogue: 0,0:01:20.22,0:01:30.28,Default,,0000,0000,0000,,morning, and welcome to the first day of\Nthe Congress. So, just a little bit Dialogue: 0,0:01:30.28,0:01:36.18,Default,,0000,0000,0000,,background about what we've done\Npreviously and why we are doing what we Dialogue: 0,0:01:36.18,0:01:42.23,Default,,0000,0000,0000,,are doing right now, is that we started\Nworking with software-defined radios and Dialogue: 0,0:01:42.23,0:01:51.93,Default,,0000,0000,0000,,by the way, who knows what software\Ndefined radio is? Okay, perfect. {\i1}laughs{\i0} Dialogue: 0,0:01:51.93,0:01:59.14,Default,,0000,0000,0000,,And who ever actually used a software-\Ndefined radio? RTL-SDR or...? Okay, less Dialogue: 0,0:01:59.14,0:02:06.33,Default,,0000,0000,0000,,people but that's still quite a lot. Okay,\Ngood. I wonder whether anyone here used Dialogue: 0,0:02:06.33,0:02:16.94,Default,,0000,0000,0000,,more expensive radios like USRPs? Less\Npeople, but okay, good. Cool. So before Dialogue: 0,0:02:16.94,0:02:22.63,Default,,0000,0000,0000,,2008 I've had no idea what software-\Ndefined radio is, was working with voice Dialogue: 0,0:02:22.63,0:02:30.33,Default,,0000,0000,0000,,over IP software person, etc., etc., so I\Nin 2008 I heard about OpenBTS, got Dialogue: 0,0:02:30.33,0:02:40.08,Default,,0000,0000,0000,,introduced to software-defined radio and I\Nwanted to make it really work and that's Dialogue: 0,0:02:40.08,0:02:52.25,Default,,0000,0000,0000,,what led us to today. In 2009 we had to\Ndevelop a clock tamer. A hardware which Dialogue: 0,0:02:52.25,0:03:00.17,Default,,0000,0000,0000,,allows to use, allowed to use USRP1 to run GSM\Nwithout problems. If anyone ever tried Dialogue: 0,0:03:00.17,0:03:05.42,Default,,0000,0000,0000,,doing this without a good clock source\Nknows what I'm talking about. And we Dialogue: 0,0:03:05.42,0:03:10.55,Default,,0000,0000,0000,,presented this - it wasn't an SDR it was\Njust a clock source - we presented this in Dialogue: 0,0:03:10.55,0:03:18.53,Default,,0000,0000,0000,,2009 in 26C3.\NThen I realized that using USRP1 is not Dialogue: 0,0:03:18.53,0:03:23.76,Default,,0000,0000,0000,,really a good idea, because we wanted to\Nbuild a robust, industrial-grade base Dialogue: 0,0:03:23.76,0:03:29.98,Default,,0000,0000,0000,,stations. So we started developing our own\Nsoftware defined radio, which we call Dialogue: 0,0:03:29.98,0:03:41.29,Default,,0000,0000,0000,,UmTRX and it was in - we started started\Nthis in 2011. Our first base stations with Dialogue: 0,0:03:41.29,0:03:51.59,Default,,0000,0000,0000,,it were deployed in 2013, but I always\Nwanted to have something really small and Dialogue: 0,0:03:51.59,0:03:59.51,Default,,0000,0000,0000,,really inexpensive and back then it wasn't\Npossible. My original idea in 2011, we Dialogue: 0,0:03:59.51,0:04:07.68,Default,,0000,0000,0000,,were to build a PCI Express card. Mini,\Nsorry, not PCI Express card but mini PCI Dialogue: 0,0:04:07.68,0:04:10.10,Default,,0000,0000,0000,,card.\NIf you remember there were like all the Dialogue: 0,0:04:10.10,0:04:14.47,Default,,0000,0000,0000,,Wi-Fi cards and mini PCI form factor and I\Nthought that would be really cool to have Dialogue: 0,0:04:14.47,0:04:22.49,Default,,0000,0000,0000,,an SDR and mini PCI, so I can plug this\Ninto my laptop or in some embedded PC and Dialogue: 0,0:04:22.49,0:04:31.71,Default,,0000,0000,0000,,have a nice SDR equipment, but back then\Nit just was not really possible, because Dialogue: 0,0:04:31.71,0:04:37.94,Default,,0000,0000,0000,,electronics were bigger and more power\Nhungry and just didn't work that way, so Dialogue: 0,0:04:37.94,0:04:49.54,Default,,0000,0000,0000,,we designed UmTRX to work over gigabit\Nethernet and it was about that size. So Dialogue: 0,0:04:49.54,0:04:57.30,Default,,0000,0000,0000,,now we spend this year at designing\Nsomething, which really brings me to what Dialogue: 0,0:04:57.30,0:05:05.29,Default,,0000,0000,0000,,I wanted those years ago, so the XTRX is a\Nmini PCI Express - again there was no PCI Dialogue: 0,0:05:05.29,0:05:10.46,Default,,0000,0000,0000,,Express back then, so now it's mini PCI\NExpress, which is even smaller than PCI, I Dialogue: 0,0:05:10.46,0:05:17.72,Default,,0000,0000,0000,,mean mini PCI and it's built to be\Nembedded friendly, so you can plug this Dialogue: 0,0:05:17.72,0:05:23.67,Default,,0000,0000,0000,,into a single board computer, embedded\Nsingle board computer. If you have a Dialogue: 0,0:05:23.67,0:05:28.02,Default,,0000,0000,0000,,laptop with a mini PCI Express you can\Nplug this into your laptop and you have a Dialogue: 0,0:05:28.02,0:05:35.21,Default,,0000,0000,0000,,really small, software-defined radio\Nequipment. And we really want to make it Dialogue: 0,0:05:35.21,0:05:39.43,Default,,0000,0000,0000,,inexpensive, that's why I was asking how\Nmany of you have ever worked it with RTL- Dialogue: 0,0:05:39.43,0:05:44.17,Default,,0000,0000,0000,,SDR, how many of you ever worked with you\NUSRPs, because the gap between them is Dialogue: 0,0:05:44.17,0:05:53.74,Default,,0000,0000,0000,,pretty big and we want to really bring the\Nsoftware-defined radio to masses. Dialogue: 0,0:05:53.74,0:05:59.55,Default,,0000,0000,0000,,Definitely won't be as cheap as RTL-SDR,\Nbut we try to make it as close as Dialogue: 0,0:05:59.55,0:06:03.33,Default,,0000,0000,0000,,possible.\NAnd at the same time, so at the size of Dialogue: 0,0:06:03.33,0:06:09.66,Default,,0000,0000,0000,,RTL-SDR, at the price well higher but,\Nhopeful hopefully it will be affordable to Dialogue: 0,0:06:09.66,0:06:17.46,Default,,0000,0000,0000,,pretty much everyone, we really want to\Nbring high performance into your hands. Dialogue: 0,0:06:17.46,0:06:22.54,Default,,0000,0000,0000,,And by high performance I mean this is a\Nfull transmit/receive with two channels Dialogue: 0,0:06:22.54,0:06:28.29,Default,,0000,0000,0000,,transmit, two channels receive, which is\Nusually called 2x2 MIMO in in the radio Dialogue: 0,0:06:28.29,0:06:37.37,Default,,0000,0000,0000,,world. The goal was to bring it to 160\Nmegasamples per second, which can roughly Dialogue: 0,0:06:37.37,0:06:44.11,Default,,0000,0000,0000,,give you like 120 MHz of radio spectrum\Navailable. Dialogue: 0,0:06:44.11,0:06:53.11,Default,,0000,0000,0000,,So what we were able to achieve is, again\Nthis is mini PCI Express form factor, it Dialogue: 0,0:06:53.11,0:07:01.64,Default,,0000,0000,0000,,has small Artix7, that's the smallest and\Nmost inexpensive FPGA, which has ability Dialogue: 0,0:07:01.64,0:07:18.03,Default,,0000,0000,0000,,to work with a PCI Express. It has LMS7000\Nchip for RFIC, very high performance, very Dialogue: 0,0:07:18.03,0:07:27.45,Default,,0000,0000,0000,,tightly embedded chip with even a DSP\Nblocks inside. It has even a GPS chip Dialogue: 0,0:07:27.45,0:07:37.34,Default,,0000,0000,0000,,here, you can actually on the right upper\Nside, you can see a GPS chip, so you can Dialogue: 0,0:07:37.34,0:07:44.06,Default,,0000,0000,0000,,accually synchronize your SDR to GPS for\Nperfect clock stability, Dialogue: 0,0:07:44.06,0:07:51.39,Default,,0000,0000,0000,,so you won't have any problems running any\Ntelecommunication systems like GSM, 3G, 4G Dialogue: 0,0:07:51.39,0:07:58.65,Default,,0000,0000,0000,,due to clock problems, and it also has\Ninterface for SIM cards, so you can Dialogue: 0,0:07:58.65,0:08:06.33,Default,,0000,0000,0000,,actually create a software-defined radio\Nmodem and run other open source projects Dialogue: 0,0:08:06.33,0:08:15.84,Default,,0000,0000,0000,,to build one in a four LT called SRSUI, if\Nyou're interested, etc., etc. so really Dialogue: 0,0:08:15.84,0:08:22.08,Default,,0000,0000,0000,,really tightly packed one. And if you put\Nthis into perspective: that's how it all Dialogue: 0,0:08:22.08,0:08:30.67,Default,,0000,0000,0000,,started in 2006 and that's what you have\Nten years later. It's pretty impressive. Dialogue: 0,0:08:30.67,0:08:36.84,Default,,0000,0000,0000,,{\i1}applause {\i0}\NThanks. But I think it actually applies to Dialogue: 0,0:08:36.84,0:08:40.32,Default,,0000,0000,0000,,the whole industry who is working on\Nshrinking the sizes because we just put Dialogue: 0,0:08:40.32,0:08:48.89,Default,,0000,0000,0000,,stuff on the PCB, you know. We're not\Nbuilding the silicon itself. Interesting Dialogue: 0,0:08:48.89,0:08:54.70,Default,,0000,0000,0000,,thing is that we did the first approach:\Nwe said let's pack everything, let's do a Dialogue: 0,0:08:54.70,0:09:03.18,Default,,0000,0000,0000,,very tight PCB design. We did an eight\Nlayer PCB design and when we send it to a Dialogue: 0,0:09:03.18,0:09:10.49,Default,,0000,0000,0000,,fab to estimate the cost it turned out\Nit's $15,000 US per piece. Well in small Dialogue: 0,0:09:10.49,0:09:18.94,Default,,0000,0000,0000,,volumes obviously but still a little bit\Ntoo much. So we had to redesign this and Dialogue: 0,0:09:18.94,0:09:26.71,Default,,0000,0000,0000,,the first thing which we did is we still\Nkept eight layers, because in our Dialogue: 0,0:09:26.71,0:09:32.81,Default,,0000,0000,0000,,experience number of layers nowadays have\Nonly minimal impact on the cost of the Dialogue: 0,0:09:32.81,0:09:42.45,Default,,0000,0000,0000,,device. So like six, eight layers - the\Nprice difference is not so big. But we did Dialogue: 0,0:09:42.45,0:09:52.19,Default,,0000,0000,0000,,complete rerouting and only kept 2-Deep\NMicroVIAs and never use the buried VIAs. Dialogue: 0,0:09:52.19,0:09:57.24,Default,,0000,0000,0000,,So this make it much easier and much\Nfaster for the fab to manufacture it and Dialogue: 0,0:09:57.24,0:10:03.74,Default,,0000,0000,0000,,the price suddenly went five, six times\Ndown and in volume again it will be Dialogue: 0,0:10:03.74,0:10:18.14,Default,,0000,0000,0000,,significantly cheaper. And that's just for\Ngeek porn how PCB looks inside. So now Dialogue: 0,0:10:18.14,0:10:25.14,Default,,0000,0000,0000,,let's go into real stuff. So PCI Express:\Nwhy did we choose PCI Express? As it was Dialogue: 0,0:10:25.14,0:10:33.31,Default,,0000,0000,0000,,said USB is a pain in the ass. You can't\Nreally use USB in industrial systems. For Dialogue: 0,0:10:33.31,0:10:40.51,Default,,0000,0000,0000,,a whole variety of reasons just unstable.\NSo we did use Ethernet for many years Dialogue: 0,0:10:40.51,0:10:47.19,Default,,0000,0000,0000,,successfully but Ethernet has one problem:\Nfirst of all inexpensive Ethernet is only Dialogue: 0,0:10:47.19,0:10:51.78,Default,,0000,0000,0000,,one gigabit and one gigabit does not offer\Nyou enough bandwidth to carry all the data Dialogue: 0,0:10:51.78,0:10:59.72,Default,,0000,0000,0000,,we want, plus its power-hungry etc. etc.\NSo PCI Express is really a good choice Dialogue: 0,0:10:59.72,0:11:06.42,Default,,0000,0000,0000,,because it's low power, it has low\Nlatency, it has very high bandwidth and Dialogue: 0,0:11:06.42,0:11:11.38,Default,,0000,0000,0000,,it's available almost universally. When we\Nstarted looking into this we realize that Dialogue: 0,0:11:11.38,0:11:17.32,Default,,0000,0000,0000,,even ARM boards, some of ARM boards have\NPCI Express, mini PCI Express slots, which Dialogue: 0,0:11:17.32,0:11:26.56,Default,,0000,0000,0000,,was a big surprise for me for example.\NSo the problems is that unlike USB you do Dialogue: 0,0:11:26.56,0:11:36.54,Default,,0000,0000,0000,,need to write your own kernel driver for\Nthis and there's no way around. And it is Dialogue: 0,0:11:36.54,0:11:41.11,Default,,0000,0000,0000,,really hard to write this driver\Nuniversally so we are writing it obviously Dialogue: 0,0:11:41.11,0:11:45.30,Default,,0000,0000,0000,,for Linux because they're working with\Nembedded systems, but if we want to Dialogue: 0,0:11:45.30,0:11:51.03,Default,,0000,0000,0000,,rewrite it for Windows or for macOS we'll\Nhave to do a lot of rewriting. So we focus Dialogue: 0,0:11:51.03,0:11:57.25,Default,,0000,0000,0000,,on what we want on Linux only right now.\NAnd now the hardest part: debugging is Dialogue: 0,0:11:57.25,0:12:02.58,Default,,0000,0000,0000,,really non-trivial. One small error and\Nyour PC is completely hanged because you Dialogue: 0,0:12:02.58,0:12:08.75,Default,,0000,0000,0000,,use something wrong. And you have to\Nreboot it and restart it. That's like Dialogue: 0,0:12:08.75,0:12:15.50,Default,,0000,0000,0000,,debugging kernel but sometimes even\Nharder. To make it worse there is no Dialogue: 0,0:12:15.50,0:12:19.40,Default,,0000,0000,0000,,really easy-to-use plug-and-play\Ninterface. If you want to restart; Dialogue: 0,0:12:19.40,0:12:24.25,Default,,0000,0000,0000,,normally, when you when you develop a PCI\NExpress card, when you want when you want Dialogue: 0,0:12:24.25,0:12:31.05,Default,,0000,0000,0000,,to restart it you have to restart your\Ndevelopment machine. Again not a nice way, Dialogue: 0,0:12:31.05,0:12:39.42,Default,,0000,0000,0000,,it's really hard. So the first thing we\Ndid is we found, that we can use Dialogue: 0,0:12:39.42,0:12:47.10,Default,,0000,0000,0000,,Thunderbolt 3 which is just recently\Nreleased, and it has ability to work Dialogue: 0,0:12:47.10,0:12:57.20,Default,,0000,0000,0000,,directly with PCI Express bus. So it\Nbasically has a mode in which it converts Dialogue: 0,0:12:57.20,0:13:01.41,Default,,0000,0000,0000,,a PCI Express into plug-and-play\Ninterface. So if you have a laptop which Dialogue: 0,0:13:01.41,0:13:09.45,Default,,0000,0000,0000,,supports Thunderbolt 3 then you can use\Nthis to do plug and play your - plug or Dialogue: 0,0:13:09.45,0:13:16.48,Default,,0000,0000,0000,,unplug your device to make your\Ndevelopment easier. There are always Dialogue: 0,0:13:16.48,0:13:23.62,Default,,0000,0000,0000,,problems: there's no easy way, there's no\Ndocumentation. Thunderbolt is not Dialogue: 0,0:13:23.62,0:13:27.38,Default,,0000,0000,0000,,compatible with Thunderbolt. Thunderbold 3\Nis not compatible with Thunderbold 2. Dialogue: 0,0:13:27.38,0:13:33.76,Default,,0000,0000,0000,,So we had to buy a special laptop with\NThunderbold 3 with special cables like all Dialogue: 0,0:13:33.76,0:13:40.12,Default,,0000,0000,0000,,this all this hard stuff. And if you\Nreally want to get documentation you have Dialogue: 0,0:13:40.12,0:13:47.50,Default,,0000,0000,0000,,to sign NDA and send a business plan to\Nthem so they can approve that your Dialogue: 0,0:13:47.50,0:13:50.67,Default,,0000,0000,0000,,business makes sense.\N{\i1}laughter{\i0} Dialogue: 0,0:13:50.67,0:13:58.64,Default,,0000,0000,0000,,I mean... {\i1}laughs{\i0} So we actually opted\Nout. We set not to go through this, what Dialogue: 0,0:13:58.64,0:14:05.34,Default,,0000,0000,0000,,we did is we found that someone is\Nactually making PCI Express to Thunderbolt Dialogue: 0,0:14:05.34,0:14:10.55,Default,,0000,0000,0000,,3 converters and selling them as dev\Nboards and that was a big relief because Dialogue: 0,0:14:10.55,0:14:16.74,Default,,0000,0000,0000,,it saved us lots of time, lots of money.\NYou just order it from from some from some Dialogue: 0,0:14:16.74,0:14:24.92,Default,,0000,0000,0000,,Asian company. And yeah this is how it\Nlooks like this converter. So you buy it, Dialogue: 0,0:14:24.92,0:14:29.97,Default,,0000,0000,0000,,like several pieces you can plug in your\NPCI Express card there and you plug this Dialogue: 0,0:14:29.97,0:14:38.33,Default,,0000,0000,0000,,into your laptop. And this is the with\NXTRX already plugged into it. Now the only Dialogue: 0,0:14:38.33,0:14:50.16,Default,,0000,0000,0000,,problem we found is that typically UEFI\Nhas a security control enabled, so that Dialogue: 0,0:14:50.16,0:14:56.70,Default,,0000,0000,0000,,any random thunderbold device can't hijack\Nyour PCI bus and can't get access to your Dialogue: 0,0:14:56.70,0:15:01.74,Default,,0000,0000,0000,,kernel memory and do some bad stuff. Which\Nis a good idea - the only problem is that Dialogue: 0,0:15:01.74,0:15:06.73,Default,,0000,0000,0000,,there is, it's not fully implemented in\NLinux. So under Windows if you plug in a Dialogue: 0,0:15:06.73,0:15:11.69,Default,,0000,0000,0000,,device which is which has no security\Nfeatures, which is not certified, it will Dialogue: 0,0:15:11.69,0:15:16.51,Default,,0000,0000,0000,,politely ask you like: "Do you really\Ntrust this device? Do you want to use it?" Dialogue: 0,0:15:16.51,0:15:21.94,Default,,0000,0000,0000,,you can say "yes". Under Linux it just\Ndoes not work. {\i1}laughs{\i0} So we spend some Dialogue: 0,0:15:21.94,0:15:25.73,Default,,0000,0000,0000,,time trying to figure out how to get\Naround this. Right, some patches from Dialogue: 0,0:15:25.73,0:15:30.37,Default,,0000,0000,0000,,Intel which are not mainline and we were\Nnot able to actually get them work. So we Dialogue: 0,0:15:30.37,0:15:38.98,Default,,0000,0000,0000,,just had to disable all this security\Nmeasure in the laptop. So be aware that Dialogue: 0,0:15:38.98,0:15:46.61,Default,,0000,0000,0000,,this is the case and we suspect that happy\Nusers of Apple might not be able to do Dialogue: 0,0:15:46.61,0:15:53.63,Default,,0000,0000,0000,,this because Apple don't have BIOS so it\Nprobably can't disable this feature. So Dialogue: 0,0:15:53.63,0:16:01.82,Default,,0000,0000,0000,,probably good incentive for someone to\Nactually finish writing the driver. Dialogue: 0,0:16:01.82,0:16:08.13,Default,,0000,0000,0000,,So now to the goal: so we wanted to, we\Nwant to achieve 160 mega samples per Dialogue: 0,0:16:08.13,0:16:13.55,Default,,0000,0000,0000,,second, 2x2 MIMO, which means two\Ntransceiver, two transmit, two receive Dialogue: 0,0:16:13.55,0:16:24.04,Default,,0000,0000,0000,,channels at 12 bits, which is roughly 7.5\NGbit/s. So first result when we plug this Dialogue: 0,0:16:24.04,0:16:26.23,Default,,0000,0000,0000,,when we got this board on the fab it\Ndidn't work Dialogue: 0,0:16:26.23,0:16:30.43,Default,,0000,0000,0000,,Sergey Kostanbaev mumbles: as expected\NAlexander Chemeris: yes as expected so the Dialogue: 0,0:16:30.43,0:16:39.75,Default,,0000,0000,0000,,first the interesting thing we realized is\Nthat: first of all the FPGA has Hardware Dialogue: 0,0:16:39.75,0:16:47.21,Default,,0000,0000,0000,,blocks for talking to a PCI Express which\Nwas called GTP which basically implement Dialogue: 0,0:16:47.21,0:16:56.85,Default,,0000,0000,0000,,like a PCI Express serial physical layer\Nbut the thing is the numbering is reversed Dialogue: 0,0:16:56.85,0:17:04.32,Default,,0000,0000,0000,,in the in PCI Express in FPGA and we did\Nnot realize this so we had to do very very Dialogue: 0,0:17:04.32,0:17:10.62,Default,,0000,0000,0000,,fine soldiering to actually swap the\N{\i1}laughs{\i0} swap the lanes you can see this Dialogue: 0,0:17:10.62,0:17:18.49,Default,,0000,0000,0000,,very fine work there.\NWe also found that one of the components Dialogue: 0,0:17:18.49,0:17:28.87,Default,,0000,0000,0000,,was deadbug which is a well-known term for\Nchips which design stage are placed at Dialogue: 0,0:17:28.87,0:17:35.96,Default,,0000,0000,0000,,mirrored so we mirrored occasionally\Nmirrored that they pin out so we had to Dialogue: 0,0:17:35.96,0:17:41.88,Default,,0000,0000,0000,,solder it upside down and if you can\Nrealize how small it is you can also Dialogue: 0,0:17:41.88,0:17:49.42,Default,,0000,0000,0000,,appreciate the work done. And what's funny\Nwhen I was looking at dead bugs I actually Dialogue: 0,0:17:49.42,0:17:56.93,Default,,0000,0000,0000,,found a manual from NASA which describes\Nhow to properly soldier dead bugs to get Dialogue: 0,0:17:56.93,0:18:00.68,Default,,0000,0000,0000,,it approved.\N{\i1}audience laughs{\i0} Dialogue: 0,0:18:00.68,0:18:08.23,Default,,0000,0000,0000,,So this is the link I think you can go\Nthere and enjoy it's also fun stuff there. Dialogue: 0,0:18:08.23,0:18:17.38,Default,,0000,0000,0000,,So after fixing all of this our next\Nattempt this kind of works. So next stage Dialogue: 0,0:18:17.38,0:18:23.34,Default,,0000,0000,0000,,is debugging the FPGA code, which has to\Ntalk to PCI Express and PCI Express has to Dialogue: 0,0:18:23.34,0:18:28.32,Default,,0000,0000,0000,,talk to Linux kernel and the kernel has to\Ntalk to the driver, driver has talked to Dialogue: 0,0:18:28.32,0:18:37.75,Default,,0000,0000,0000,,the user space. So peripherals are easy so\Nthe UART SPIs we've got to work almost Dialogue: 0,0:18:37.75,0:18:44.80,Default,,0000,0000,0000,,immediately no problems with that, but DMA\Nwas a real beast. So we spent a lot of Dialogue: 0,0:18:44.80,0:18:52.66,Default,,0000,0000,0000,,time trying to get DMA to work and the\Nproblem is that with DMA it's on FPGA so Dialogue: 0,0:18:52.66,0:18:59.73,Default,,0000,0000,0000,,you can't just place a breakpoint like you\Ndo in C or C++ or in other languages it's Dialogue: 0,0:18:59.73,0:19:07.48,Default,,0000,0000,0000,,real-time system running on system like\Nit's real-time hardware, which is running Dialogue: 0,0:19:07.48,0:19:16.35,Default,,0000,0000,0000,,on the fabric so you we had to Sergey was\Nmainly developing this had to write a lot Dialogue: 0,0:19:16.35,0:19:22.78,Default,,0000,0000,0000,,of small test benches and and test\Neverything piece by piece. Dialogue: 0,0:19:22.78,0:19:31.48,Default,,0000,0000,0000,,So all parts of the DMA code we had was\Nwrapped into a small test bench which was Dialogue: 0,0:19:31.48,0:19:39.72,Default,,0000,0000,0000,,emulating all the all the tricks and as\Nclassics predicted it took about five to Dialogue: 0,0:19:39.72,0:19:47.68,Default,,0000,0000,0000,,ten times more than actually writing the\Ncode. So we really blew up our and Dialogue: 0,0:19:47.68,0:19:54.53,Default,,0000,0000,0000,,predicted timelines by doing this, but the\Nend we've got really stable stable work. Dialogue: 0,0:19:54.53,0:20:03.76,Default,,0000,0000,0000,,So some suggestions for anyone who will\Ntry to repeat this exercise is there is a Dialogue: 0,0:20:03.76,0:20:09.59,Default,,0000,0000,0000,,logic analyzer built-in to Xilinx and you\Ncan use, it it's nice it's, sometimes it's Dialogue: 0,0:20:09.59,0:20:15.96,Default,,0000,0000,0000,,very helpful but you can't debug\Ntransient box, which are coming out at Dialogue: 0,0:20:15.96,0:20:22.99,Default,,0000,0000,0000,,when some weird conditions are coming up.\NSo you have to implement some read back Dialogue: 0,0:20:22.99,0:20:28.81,Default,,0000,0000,0000,,registers which shows important statistic\Nlike important data about how your system Dialogue: 0,0:20:28.81,0:20:35.34,Default,,0000,0000,0000,,behaves, in our case it's various counters\Non the DMA interface. So you can actually Dialogue: 0,0:20:35.34,0:20:40.95,Default,,0000,0000,0000,,see kind of see what's happening with your\Nwith your data: Is it received? Is it Dialogue: 0,0:20:40.95,0:20:46.27,Default,,0000,0000,0000,,sent? How much is and how much is\Nreceived? So like for example, we can see Dialogue: 0,0:20:46.27,0:20:53.56,Default,,0000,0000,0000,,when we saturate the bus or when actually\Nis an underrun so host is not providing Dialogue: 0,0:20:53.56,0:20:57.39,Default,,0000,0000,0000,,data fast enough, so we can at least\Nunderstand whether it's a host problem or Dialogue: 0,0:20:57.39,0:21:01.77,Default,,0000,0000,0000,,whether it's an FPGA, problem on which\Npart we do we debug next because again: Dialogue: 0,0:21:01.77,0:21:07.77,Default,,0000,0000,0000,,it's a very multi layer problem you start\Nwith FPGA, PCI Express, kernel, driver, Dialogue: 0,0:21:07.77,0:21:15.34,Default,,0000,0000,0000,,user space, and any part can fail. so you\Ncan't work blind like this. So again the Dialogue: 0,0:21:15.34,0:21:23.18,Default,,0000,0000,0000,,goal was to get 160 MSPS with the first\Nimplementation we could 2 MSPS: roughly 60 Dialogue: 0,0:21:23.18,0:21:30.22,Default,,0000,0000,0000,,times slower.\NThe problem is that software just wasn't Dialogue: 0,0:21:30.22,0:21:36.15,Default,,0000,0000,0000,,keeping up and wasn't sending data fast\Nenough. So it was like many things done Dialogue: 0,0:21:36.15,0:21:41.39,Default,,0000,0000,0000,,but the most important parts is: use real-\Ntime priority if you want to get very Dialogue: 0,0:21:41.39,0:21:46.94,Default,,0000,0000,0000,,stable results and well fix software bugs.\NAnd one of the most important bugs we had Dialogue: 0,0:21:46.94,0:21:54.24,Default,,0000,0000,0000,,was that DMA buffers were not freed in\Nproper time immediately so they were busy Dialogue: 0,0:21:54.24,0:21:59.43,Default,,0000,0000,0000,,for longer than they should be, which\Nintroduced extra cycles and basically just Dialogue: 0,0:21:59.43,0:22:06.01,Default,,0000,0000,0000,,reduced the bandwidth.\NAt this point let's talk a little bit Dialogue: 0,0:22:06.01,0:22:14.39,Default,,0000,0000,0000,,about how to implement a high-performance\Ndriver for Linux, because if you want to Dialogue: 0,0:22:14.39,0:22:20.87,Default,,0000,0000,0000,,get real real performance you have to\Nstart with the right design. There are Dialogue: 0,0:22:20.87,0:22:26.61,Default,,0000,0000,0000,,basically three approaches and the whole\Nspectrum in between; like two approaches Dialogue: 0,0:22:26.61,0:22:33.65,Default,,0000,0000,0000,,and the whole spectrum in between, which\Nis where you can refer to three. The first Dialogue: 0,0:22:33.65,0:22:41.53,Default,,0000,0000,0000,,approach is full kernel control, in which\Ncase kernel driver not only is on the Dialogue: 0,0:22:41.53,0:22:45.70,Default,,0000,0000,0000,,transfer, it actually has all the logics\Nof controlling your device and all the Dialogue: 0,0:22:45.70,0:22:52.49,Default,,0000,0000,0000,,export ioctl to the user space and\Nthat's the kind of a traditional way of Dialogue: 0,0:22:52.49,0:22:57.67,Default,,0000,0000,0000,,writing drivers. Your your user space is\Ncompletely abstracted from all the Dialogue: 0,0:22:57.67,0:23:07.03,Default,,0000,0000,0000,,details. The problem is that this is\Nprobably the slowest way to do it. The Dialogue: 0,0:23:07.03,0:23:14.34,Default,,0000,0000,0000,,other way is what's called the "zero cup\Ninterface": your only control is held in Dialogue: 0,0:23:14.34,0:23:21.38,Default,,0000,0000,0000,,the kernel and data is provided, the raw\Ndata is provided to user space "as-is". So Dialogue: 0,0:23:21.38,0:23:27.92,Default,,0000,0000,0000,,you avoid memory copy which make it\Nfaster. But still not fast enough if you Dialogue: 0,0:23:27.92,0:23:34.28,Default,,0000,0000,0000,,really want to achieve maximum\Nperformance, because you still have Dialogue: 0,0:23:34.28,0:23:40.98,Default,,0000,0000,0000,,context switches between the kernel and\Nthe user space. The most... the fastest Dialogue: 0,0:23:40.98,0:23:47.29,Default,,0000,0000,0000,,approach possible is to have full user\Nspace implementation when kernel just Dialogue: 0,0:23:47.29,0:23:53.06,Default,,0000,0000,0000,,exposed everything and says "now you do it\Nyourself" and you have no you have no Dialogue: 0,0:23:53.06,0:24:02.43,Default,,0000,0000,0000,,context switches, like almost no, and you\Ncan really optimize everything. So what Dialogue: 0,0:24:02.43,0:24:08.85,Default,,0000,0000,0000,,is... what are the problems with this?\NThe pro the pros I already mentioned: no Dialogue: 0,0:24:08.85,0:24:13.54,Default,,0000,0000,0000,,no switches between kernel user space,\Nit's very low latency because of this as Dialogue: 0,0:24:13.54,0:24:20.98,Default,,0000,0000,0000,,well, it's very high bandwidth. But if you\Nare not interested in getting the very Dialogue: 0,0:24:20.98,0:24:27.94,Default,,0000,0000,0000,,high performance, the most performance, and\Nyou just want to have like some little, Dialogue: 0,0:24:27.94,0:24:33.30,Default,,0000,0000,0000,,like say low bandwidth performance, then\Nyou will have to add hacks, because you Dialogue: 0,0:24:33.30,0:24:36.71,Default,,0000,0000,0000,,can't get notifications of the kernel that\Nresources available is more data Dialogue: 0,0:24:36.71,0:24:45.57,Default,,0000,0000,0000,,available. It also makes it vulnerable\Nvulnerable because if user space can Dialogue: 0,0:24:45.57,0:24:55.31,Default,,0000,0000,0000,,access it, then it can do whatever it\Nwant. We at the end decided that... one Dialogue: 0,0:24:55.31,0:25:02.59,Default,,0000,0000,0000,,more important thing: how to actually to\Nget the best performance out of out of the Dialogue: 0,0:25:02.59,0:25:10.30,Default,,0000,0000,0000,,bus. This is a very (?)(?) set as we want\Nto poll your device or not to poll and get Dialogue: 0,0:25:10.30,0:25:14.26,Default,,0000,0000,0000,,notified. What is polling? I guess\Neveryone as programmer understands it, so Dialogue: 0,0:25:14.26,0:25:18.02,Default,,0000,0000,0000,,polling is when you asked repeatedly: "Are\Nyou ready?", "Are you ready?", "Are you Dialogue: 0,0:25:18.02,0:25:20.37,Default,,0000,0000,0000,,ready?" and when it's ready you get the\Ndata immediately. Dialogue: 0,0:25:20.37,0:25:25.26,Default,,0000,0000,0000,,It's basically a busy loop of your you\Njust constantly asking device what's Dialogue: 0,0:25:25.26,0:25:33.35,Default,,0000,0000,0000,,happening. You need to dedicate a full\Ncore, and thanks God we have multi-core Dialogue: 0,0:25:33.35,0:25:39.52,Default,,0000,0000,0000,,CPUs nowadays, so you can dedicate the\Nfull core to this polling and you can just Dialogue: 0,0:25:39.52,0:25:45.54,Default,,0000,0000,0000,,pull constantly. But again if you don't\Nneed this highest performance, you just Dialogue: 0,0:25:45.54,0:25:53.19,Default,,0000,0000,0000,,need to get something, then you will be\Nwasting a lot of CPU resources. At the end Dialogue: 0,0:25:53.19,0:26:00.43,Default,,0000,0000,0000,,we decided to do a combined architecture\Nof your, it is possible to pull but Dialogue: 0,0:26:00.43,0:26:05.50,Default,,0000,0000,0000,,there's also a chance and to get\Nnotification from a kernel to for for Dialogue: 0,0:26:05.50,0:26:11.05,Default,,0000,0000,0000,,applications, which recover, which needs\Nlow bandwidth, but also require a better Dialogue: 0,0:26:11.05,0:26:17.48,Default,,0000,0000,0000,,CPU performance. Which I think is the best\Nway if you are trying to target both Dialogue: 0,0:26:17.48,0:26:30.85,Default,,0000,0000,0000,,worlds. Very quickly: the architecture of\Nsystem. We try to make it very very Dialogue: 0,0:26:30.85,0:26:50.73,Default,,0000,0000,0000,,portable so and flexible. There is a\Nkernel driver, which talks to low-level Dialogue: 0,0:26:50.73,0:26:55.69,Default,,0000,0000,0000,,library which implements all this logic,\Nwhich we took out of the driver: to Dialogue: 0,0:26:55.69,0:27:01.31,Default,,0000,0000,0000,,control the\NPCI Express, to work with DMA, to provide Dialogue: 0,0:27:01.31,0:27:09.36,Default,,0000,0000,0000,,all the... to hide all the details of the\Nactual bus implementation. Dialogue: 0,0:27:09.36,0:27:17.17,Default,,0000,0000,0000,,And then there is a high-level library\Nwhich talks to this low-level library and Dialogue: 0,0:27:17.17,0:27:22.18,Default,,0000,0000,0000,,also to libraries which implement control\Nof actual peripherals, and most Dialogue: 0,0:27:22.18,0:27:28.92,Default,,0000,0000,0000,,importantly to the library which\Nimplements control over our RFIC chip. Dialogue: 0,0:27:28.92,0:27:35.12,Default,,0000,0000,0000,,This way it's very modular, we can replace\NPCI Express with something else later, we Dialogue: 0,0:27:35.12,0:27:46.05,Default,,0000,0000,0000,,might be able to port it to other\Noperating systems, and that's the goal. Dialogue: 0,0:27:46.05,0:27:50.06,Default,,0000,0000,0000,,Another interesting issue is: when you\Nstart writing the Linux kernel driver you Dialogue: 0,0:27:50.06,0:27:57.12,Default,,0000,0000,0000,,very quickly realize that while LDD, which\Nis a classic book for a Linux driver, Dialogue: 0,0:27:57.12,0:28:02.22,Default,,0000,0000,0000,,writing is good and it will give you a\Ngood insight; it's not actually up-to- Dialogue: 0,0:28:02.22,0:28:08.61,Default,,0000,0000,0000,,date. It's more than ten years old and\Nthere's all of new interfaces which are Dialogue: 0,0:28:08.61,0:28:14.81,Default,,0000,0000,0000,,not described there, so you have to resort\Nto reading the manuals and all the Dialogue: 0,0:28:14.81,0:28:20.41,Default,,0000,0000,0000,,documentation in the kernel itself. Well\Nat least you get the up-to-date Dialogue: 0,0:28:20.41,0:28:31.99,Default,,0000,0000,0000,,information. The decisions we made is to\Nmake everything easy. We use TTY for GPS Dialogue: 0,0:28:31.99,0:28:38.09,Default,,0000,0000,0000,,and so you can really attach a pretty much\Nany application which talks to GPS. So all Dialogue: 0,0:28:38.09,0:28:45.97,Default,,0000,0000,0000,,of existing applications can just work out\Nof the box. And we also wanted to be able Dialogue: 0,0:28:45.97,0:28:54.88,Default,,0000,0000,0000,,to synchronize system clock to GPS, so we\Nget automatic log synchronization across Dialogue: 0,0:28:54.88,0:28:59.01,Default,,0000,0000,0000,,multiple systems, which is very important\Nwhen we are deploying many, many devices Dialogue: 0,0:28:59.01,0:29:07.09,Default,,0000,0000,0000,,around the world.\NWe plan to do two interfaces, one as key Dialogue: 0,0:29:07.09,0:29:15.92,Default,,0000,0000,0000,,PPS and another is a DCT, because DCT line\Non the UART exposed over TTY. Because Dialogue: 0,0:29:15.92,0:29:20.26,Default,,0000,0000,0000,,again we found that there are two types of\Napplications: one to support one API, Dialogue: 0,0:29:20.26,0:29:25.54,Default,,0000,0000,0000,,others that support other API and there is\Nno common thing so we have to support Dialogue: 0,0:29:25.54,0:29:38.65,Default,,0000,0000,0000,,both. As we described, we want to have\Npolls so we can get notifications of the Dialogue: 0,0:29:38.65,0:29:48.13,Default,,0000,0000,0000,,kernel when data is available and we don't\Nneed to do real busy looping all the time. Dialogue: 0,0:29:48.13,0:29:55.79,Default,,0000,0000,0000,,After all the software optimizations we've\Ngot to like 10 MSPS: still very, very far Dialogue: 0,0:29:55.79,0:30:02.37,Default,,0000,0000,0000,,from what we want to achieve.\NNow there should have been a lot of Dialogue: 0,0:30:02.37,0:30:06.57,Default,,0000,0000,0000,,explanations about PCI Express, but when\Nwe actually wrote everything we wanted to Dialogue: 0,0:30:06.57,0:30:13.100,Default,,0000,0000,0000,,say we realize, it's just like a full two\Nhours talk just on PCI Express. So we are Dialogue: 0,0:30:13.100,0:30:17.76,Default,,0000,0000,0000,,not going to give it here, I'll just give\Nsome highlights which are most Dialogue: 0,0:30:17.76,0:30:23.89,Default,,0000,0000,0000,,interesting. If you if there is real\Ninterest, we can set up a workshop and Dialogue: 0,0:30:23.89,0:30:32.34,Default,,0000,0000,0000,,some of the later days and talking more\Ndetails about PCI Express specifically. Dialogue: 0,0:30:32.34,0:30:38.55,Default,,0000,0000,0000,,The thing is there is no open source cores\Nfor PCI Express, which are optimized for Dialogue: 0,0:30:38.55,0:30:48.01,Default,,0000,0000,0000,,high performance, real time applications.\NThere is Xillybus which as I understand is Dialogue: 0,0:30:48.01,0:30:53.35,Default,,0000,0000,0000,,going to be open source, but they provide\Nyou a source if you pay them. It's very Dialogue: 0,0:30:53.35,0:30:59.61,Default,,0000,0000,0000,,popular because it's very very easy to do,\Nbut it's not giving you performance. If I Dialogue: 0,0:30:59.61,0:31:04.98,Default,,0000,0000,0000,,remember correctly the best it can do is\Nmaybe like 50 percent bus saturation. Dialogue: 0,0:31:04.98,0:31:10.80,Default,,0000,0000,0000,,So there's also Xilinx implementation, but\Nif you are using Xilinx implementation Dialogue: 0,0:31:10.80,0:31:21.05,Default,,0000,0000,0000,,with AXI bus than you're really locked in\Nwith AXI bus with Xilinx. And it also not Dialogue: 0,0:31:21.05,0:31:25.00,Default,,0000,0000,0000,,very efficient in terms of resources and\Nif you remember we want to make this very, Dialogue: 0,0:31:25.00,0:31:30.03,Default,,0000,0000,0000,,very inexpensive. So our goal is to you\N... is to be able to fit everything in the Dialogue: 0,0:31:30.03,0:31:38.50,Default,,0000,0000,0000,,smallest Arctic's 7 FPGA, and that's quite\Nchallenging with all the stuff in there Dialogue: 0,0:31:38.50,0:31:47.65,Default,,0000,0000,0000,,and we just can't waste resources. So\Ndecision is to write your own PCI Express Dialogue: 0,0:31:47.65,0:31:53.04,Default,,0000,0000,0000,,implementation. That's how it looks like.\NI'm not going to discuss it right now. Dialogue: 0,0:31:53.04,0:31:59.95,Default,,0000,0000,0000,,There are several iterations. Initially it\Nlooked much simpler, turned out not to Dialogue: 0,0:31:59.95,0:32:06.10,Default,,0000,0000,0000,,work well.\NSo some interesting stuff about PCI Dialogue: 0,0:32:06.10,0:32:12.75,Default,,0000,0000,0000,,Express which we stumbled upon is that it\Nwas working really well on Atom which is Dialogue: 0,0:32:12.75,0:32:17.46,Default,,0000,0000,0000,,our main development platform because we\Nare doing a lot of embedded stuff. Worked Dialogue: 0,0:32:17.46,0:32:26.48,Default,,0000,0000,0000,,really well. When we try to plug this into\Ncore i7 just started hanging once in a Dialogue: 0,0:32:26.48,0:32:35.09,Default,,0000,0000,0000,,while. So after like several not days\Nmaybe with debugging, Sergey found that Dialogue: 0,0:32:35.09,0:32:39.33,Default,,0000,0000,0000,,very interesting statement in the standard\Nwhich says that value is zero in byte Dialogue: 0,0:32:39.33,0:32:45.87,Default,,0000,0000,0000,,count actually stands not for zero bytes\Nbut for 4096 bytes. Dialogue: 0,0:32:45.87,0:32:58.74,Default,,0000,0000,0000,,I mean that's a really cool optimization.\NSo another thing is completion which is a Dialogue: 0,0:32:58.74,0:33:03.64,Default,,0000,0000,0000,,term in PCI Express basically for\Nacknowledgment which also can carry some Dialogue: 0,0:33:03.64,0:33:12.43,Default,,0000,0000,0000,,data back to your request. And sometimes\Nif you're not sending completion, device Dialogue: 0,0:33:12.43,0:33:20.74,Default,,0000,0000,0000,,just hangs. And what happens is that in\Nthis case due to some historical heritage Dialogue: 0,0:33:20.74,0:33:29.55,Default,,0000,0000,0000,,of x86 it just starts returning you FFF.\NAnd if you have a register which says: „Is Dialogue: 0,0:33:29.55,0:33:35.47,Default,,0000,0000,0000,,your device okay?“ and this register shows\None to say „The device is okay“, guess Dialogue: 0,0:33:35.47,0:33:38.50,Default,,0000,0000,0000,,what will happen?\NYou will be always reading that your Dialogue: 0,0:33:38.50,0:33:46.59,Default,,0000,0000,0000,,device is okay. So the suggestion is not\Nto use one as the status for okay and use Dialogue: 0,0:33:46.59,0:33:52.79,Default,,0000,0000,0000,,either zero or better like a two-beat\Nsequence. So you are definitely sure that Dialogue: 0,0:33:52.79,0:34:03.66,Default,,0000,0000,0000,,you are okay and not getting FFF's. So\Nwhen you have a device which again may Dialogue: 0,0:34:03.66,0:34:10.44,Default,,0000,0000,0000,,fail at any of the layers, you just got\Nthis new board, it's really hard, it's Dialogue: 0,0:34:10.44,0:34:17.64,Default,,0000,0000,0000,,really hard to debug because of memory\Ncorruption. So we had a software bug and Dialogue: 0,0:34:17.64,0:34:25.10,Default,,0000,0000,0000,,it was writing DMA addresses\Nincorrectly and we were wondering why we Dialogue: 0,0:34:25.10,0:34:32.18,Default,,0000,0000,0000,,are not getting any data in our buffers at\Nthe same time. After several starts, Dialogue: 0,0:34:32.18,0:34:41.16,Default,,0000,0000,0000,,operating system just crashes. Well, that's\Nthe reason why there is this UEFI Dialogue: 0,0:34:41.16,0:34:47.20,Default,,0000,0000,0000,,protection which prevents you from\Nplugging in devices like this into your Dialogue: 0,0:34:47.20,0:34:52.27,Default,,0000,0000,0000,,computer. Because it was basically writing\Ndata, like random data into random Dialogue: 0,0:34:52.27,0:35:00.30,Default,,0000,0000,0000,,portions of your memory. So a lot of\Ndebugging, a lot of tests and test benches Dialogue: 0,0:35:00.30,0:35:10.59,Default,,0000,0000,0000,,and we were able to find this. And another\Nthing is if you deinitialize your driver Dialogue: 0,0:35:10.59,0:35:15.25,Default,,0000,0000,0000,,incorrectly, and that's what's happening\Nwhen you have plug-and-play device, which Dialogue: 0,0:35:15.25,0:35:22.12,Default,,0000,0000,0000,,you can plug and unplug, then you may end\Nup in a situation of your ... you are Dialogue: 0,0:35:22.12,0:35:28.04,Default,,0000,0000,0000,,trying to write into memory which is\Nalready freed by approaching system and Dialogue: 0,0:35:28.04,0:35:35.96,Default,,0000,0000,0000,,used for something else. Very well-known\Nproblem but it also happens here. So there Dialogue: 0,0:35:35.96,0:35:50.55,Default,,0000,0000,0000,,... why DMA is really hard is because it\Nhas this completion architecture for Dialogue: 0,0:35:50.55,0:35:56.44,Default,,0000,0000,0000,,writing for ... sorry ... for reading\Ndata. Writes are easy. You just send the Dialogue: 0,0:35:56.44,0:36:00.46,Default,,0000,0000,0000,,data, you forget about it. It's a fire-\Nand-forget system. But for reading you Dialogue: 0,0:36:00.46,0:36:10.42,Default,,0000,0000,0000,,really need to get your data back. And the\Nthing is, it looks like this. You really Dialogue: 0,0:36:10.42,0:36:16.02,Default,,0000,0000,0000,,hope that there would be some pointing\Ndevice here. But basically on the top left Dialogue: 0,0:36:16.02,0:36:24.24,Default,,0000,0000,0000,,you can see requests for read and on the\Nright you can see completion transactions. Dialogue: 0,0:36:24.24,0:36:29.89,Default,,0000,0000,0000,,So basically each transaction can be and\Nmost likely will be split into multiple Dialogue: 0,0:36:29.89,0:36:38.90,Default,,0000,0000,0000,,transactions. So first of all you have to\Ncollect all these pieces and like write Dialogue: 0,0:36:38.90,0:36:46.21,Default,,0000,0000,0000,,them into proper parts of the memory.\NBut that's not all. The thing is the Dialogue: 0,0:36:46.21,0:36:53.37,Default,,0000,0000,0000,,latency between request and completion is\Nreally high. It's like 50 cycles. So if Dialogue: 0,0:36:53.37,0:36:58.99,Default,,0000,0000,0000,,you have a single, only single transaction\Nin fly you will get really bad Dialogue: 0,0:36:58.99,0:37:03.90,Default,,0000,0000,0000,,performance. You do need to have multiple\Ntransactions in flight. And the worst Dialogue: 0,0:37:03.90,0:37:13.17,Default,,0000,0000,0000,,thing is that transactions can return data\Nin random order. So it's a much more Dialogue: 0,0:37:13.17,0:37:19.82,Default,,0000,0000,0000,,complicated state machine than we expected\Noriginally. So when I said, you know, the Dialogue: 0,0:37:19.82,0:37:25.59,Default,,0000,0000,0000,,architecture was much simpler originally,\Nwe don't have all of this and we had to Dialogue: 0,0:37:25.59,0:37:31.67,Default,,0000,0000,0000,,realize this while implementing. So again\Nhere was a whole description of how Dialogue: 0,0:37:31.67,0:37:41.20,Default,,0000,0000,0000,,exactly this works. But not this time. So\Nnow after all these optimizations we've Dialogue: 0,0:37:41.20,0:37:48.86,Default,,0000,0000,0000,,got 20 mega samples per second which is\Njust six times lower than what we are Dialogue: 0,0:37:48.86,0:37:59.60,Default,,0000,0000,0000,,aiming at. So now the next thing is PCI\NExpress lanes scalability. So PCI Express Dialogue: 0,0:37:59.60,0:38:07.22,Default,,0000,0000,0000,,is a serial bus. So it has multiple lanes\Nand they allow you to basically Dialogue: 0,0:38:07.22,0:38:14.35,Default,,0000,0000,0000,,horizontally scale your bandwidth. One\Nlane is like x, than two lane is 2x, four Dialogue: 0,0:38:14.35,0:38:20.16,Default,,0000,0000,0000,,lane is 4x. So the more lanes you have the\Nmore performance you are getting out of Dialogue: 0,0:38:20.16,0:38:23.97,Default,,0000,0000,0000,,your, out of your bus. So the more\Nbandwidth you're getting out of your bus. Dialogue: 0,0:38:23.97,0:38:31.70,Default,,0000,0000,0000,,Not performance. So the issue is that\Ntypical a mini PCI Express, so the mini Dialogue: 0,0:38:31.70,0:38:38.60,Default,,0000,0000,0000,,PCI Express standard only standardized one\Nlane. And second lane is left as optional. Dialogue: 0,0:38:38.60,0:38:46.10,Default,,0000,0000,0000,,So most motherboards don't support this.\NThere are some but not all of them. And we Dialogue: 0,0:38:46.10,0:38:52.37,Default,,0000,0000,0000,,really wanted to get this done. So we\Ndesigned a special converter board which Dialogue: 0,0:38:52.37,0:38:57.53,Default,,0000,0000,0000,,allows you to plug your mini PCI Express\Ninto a full-size PCI Express and Dialogue: 0,0:38:57.53,0:39:06.79,Default,,0000,0000,0000,,get two lanes working. And we're also\Nplanning to have a similar board which Dialogue: 0,0:39:06.79,0:39:12.66,Default,,0000,0000,0000,,will have multiple slots so you will be\Nable to get multiple XTRX-SDRs on to the Dialogue: 0,0:39:12.66,0:39:21.27,Default,,0000,0000,0000,,same, onto the same carrier board and plug\Nthis into let's say PCI Express 16x and Dialogue: 0,0:39:21.27,0:39:29.06,Default,,0000,0000,0000,,you will get like really a lot of ... SDR\N... a lot of IQ data which then will be Dialogue: 0,0:39:29.06,0:39:38.76,Default,,0000,0000,0000,,your problem how to, how to process. So\Nwith two x's it's about twice performance Dialogue: 0,0:39:38.76,0:39:48.93,Default,,0000,0000,0000,,so we are getting fifty mega samples per\Nsecond. And that's the time to really cut Dialogue: 0,0:39:48.93,0:39:59.23,Default,,0000,0000,0000,,the fat because the real sample size of\NLMS7 is 12 bits and we are transmitting 16 Dialogue: 0,0:39:59.23,0:40:06.93,Default,,0000,0000,0000,,because it's easier. Because CPU is\Nworking on 8, 16, 32. So we originally Dialogue: 0,0:40:06.93,0:40:13.77,Default,,0000,0000,0000,,designed the driver to support 8 bit, 12\Nbit and 16 bit to be able to do this Dialogue: 0,0:40:13.77,0:40:23.80,Default,,0000,0000,0000,,scaling. And for the test we said okay\Nlet's go from 16 to 8 bit. We'll lose Dialogue: 0,0:40:23.80,0:40:32.96,Default,,0000,0000,0000,,some dynamic range but who cares these\Ndays. Still stayed the same, it's still 50 Dialogue: 0,0:40:32.96,0:40:41.98,Default,,0000,0000,0000,,mega samples per second, no matter what we\Ndid. And that was a lot of interesting Dialogue: 0,0:40:41.98,0:40:49.58,Default,,0000,0000,0000,,debugging going on. And we realized that\Nwe actually made another, not a really Dialogue: 0,0:40:49.58,0:40:58.72,Default,,0000,0000,0000,,mistake. We didn't, we didn't really know\Nthis when we designed. But we should have Dialogue: 0,0:40:58.72,0:41:04.45,Default,,0000,0000,0000,,used a higher voltage for this high speed\Nbus to get it to the full performance. And Dialogue: 0,0:41:04.45,0:41:12.62,Default,,0000,0000,0000,,at 1.8 it was just degrading too fast and\Nthe bus itself was not performing well. So Dialogue: 0,0:41:12.62,0:41:21.86,Default,,0000,0000,0000,,our next prototype will be using higher\Nvoltage specifically for this bus. And Dialogue: 0,0:41:21.86,0:41:26.56,Default,,0000,0000,0000,,this is kind of stuff which makes\Ndesigning hardware for high speed really Dialogue: 0,0:41:26.56,0:41:32.21,Default,,0000,0000,0000,,hard because you have to care about\Ncoherence of the parallel buses on your, Dialogue: 0,0:41:32.21,0:41:38.55,Default,,0000,0000,0000,,on your system. So at the same time we do\Nwant to keep 1.8 volts for everything else Dialogue: 0,0:41:38.55,0:41:43.48,Default,,0000,0000,0000,,as much as possible. Because another\Nproblem we are facing with this device is Dialogue: 0,0:41:43.48,0:41:47.07,Default,,0000,0000,0000,,that by the standard mini PCI Express\Nallows only like ... Dialogue: 0,0:41:47.07,0:41:51.22,Default,,0000,0000,0000,,Sergey Kostanbaev: ... 2.5 ...\NAlexander Chemeris: ... 2.5 watts of power Dialogue: 0,0:41:51.22,0:41:58.37,Default,,0000,0000,0000,,consumption, no more. And that's we were,\Nwe were very lucky that LMS7 has such so Dialogue: 0,0:41:58.37,0:42:04.46,Default,,0000,0000,0000,,good, so good power consumption\Nperformance. We actually had some extra Dialogue: 0,0:42:04.46,0:42:10.05,Default,,0000,0000,0000,,space to have FPGA and GPS and all this\Nstuff. But we just can't let the power Dialogue: 0,0:42:10.05,0:42:14.88,Default,,0000,0000,0000,,consumption go up. Our measurements on\Nthis device showed about ... Dialogue: 0,0:42:14.88,0:42:18.51,Default,,0000,0000,0000,,Sergey Kostanbaev: ... 2.3 ...\NAlexander Chemeris: ... 2.3 watts of power Dialogue: 0,0:42:18.51,0:42:27.22,Default,,0000,0000,0000,,consumption. So we are like at the limit\Nat this point. So when we fix the bus with Dialogue: 0,0:42:27.22,0:42:31.42,Default,,0000,0000,0000,,the higher voltage, you know it's a\Ntheoretical exercise, because we haven't Dialogue: 0,0:42:31.42,0:42:38.00,Default,,0000,0000,0000,,done this yet, that's plenty to happen in\Na couple months. We should be able to get Dialogue: 0,0:42:38.00,0:42:47.33,Default,,0000,0000,0000,,to this numbers which was just 1.2 times\Nslower. Then the next thing will be to fix Dialogue: 0,0:42:47.33,0:42:55.55,Default,,0000,0000,0000,,another issue which we made at the very\Nbeginning: we have procured a wrong chip. Dialogue: 0,0:42:55.55,0:43:05.27,Default,,0000,0000,0000,,Just one digit difference, you can see\Nit's highlighted in red and green, and Dialogue: 0,0:43:05.27,0:43:13.23,Default,,0000,0000,0000,,this chip it supports only a generation 1\NPCI Express which is twice slower than Dialogue: 0,0:43:13.23,0:43:18.19,Default,,0000,0000,0000,,generation 2 PCI Express.\NSo again, hopefully we'll replace the chip Dialogue: 0,0:43:18.19,0:43:30.14,Default,,0000,0000,0000,,and just get very simple doubling of the\Nperformance. Still it will be slower than Dialogue: 0,0:43:30.14,0:43:39.77,Default,,0000,0000,0000,,we wanted it to be and here is what comes\Nlike practical versus theoretical numbers. Dialogue: 0,0:43:39.77,0:43:47.12,Default,,0000,0000,0000,,Well as every bus it has it has overheads\Nand one of the things which again we Dialogue: 0,0:43:47.12,0:43:51.28,Default,,0000,0000,0000,,realized when we were implementing this\Nis, that even though the standard Dialogue: 0,0:43:51.28,0:43:58.91,Default,,0000,0000,0000,,standardized is the payload size of 4kB,\Nactual implementations are different. For Dialogue: 0,0:43:58.91,0:44:08.39,Default,,0000,0000,0000,,example desktop computers like Intel Core\Nor Intel Atom they only have 128 byte Dialogue: 0,0:44:08.39,0:44:18.74,Default,,0000,0000,0000,,payload. So there is much more overhead\Ngoing on the bus to transfer data and even Dialogue: 0,0:44:18.74,0:44:29.18,Default,,0000,0000,0000,,theoretically you can only achieve 87%\Nefficiency. And on Xeon we tested and we Dialogue: 0,0:44:29.18,0:44:37.11,Default,,0000,0000,0000,,found that they're using 256 payload size\Nand this can give you like a 92% Dialogue: 0,0:44:37.11,0:44:45.13,Default,,0000,0000,0000,,efficiency on the bus and this is before\Nthe overhead so the real reality is even Dialogue: 0,0:44:45.13,0:44:53.18,Default,,0000,0000,0000,,worse. An interesting thing which we also\Ndid not expect, is that we originally were Dialogue: 0,0:44:53.18,0:45:02.85,Default,,0000,0000,0000,,developing on Intel Atom and everything\Nwas working great. When we plug this into Dialogue: 0,0:45:02.85,0:45:10.72,Default,,0000,0000,0000,,laptop like Core i7 multi-core really\Npowerful device, we didn't expect that it Dialogue: 0,0:45:10.72,0:45:20.14,Default,,0000,0000,0000,,wouldn't work. Obviously Core i7 should\Nwork better than Atom: no, not always. Dialogue: 0,0:45:20.14,0:45:26.37,Default,,0000,0000,0000,,The thing is, we were plugging into a\Nlaptop, which had a built-in video card Dialogue: 0,0:45:26.37,0:45:44.75,Default,,0000,0000,0000,,which was sitting on the same PCI bus and\Nprobably manufacturer hard-coded the higher Dialogue: 0,0:45:44.75,0:45:50.59,Default,,0000,0000,0000,,priority for the video card than for\Neverything else in the system, because I Dialogue: 0,0:45:50.59,0:45:56.30,Default,,0000,0000,0000,,don't want your your screen to flicker.\NAnd so when you move a window you actually Dialogue: 0,0:45:56.30,0:46:04.10,Default,,0000,0000,0000,,see the late packets coming to your PCI\Ndevice. We had to introduce a jitter Dialogue: 0,0:46:04.10,0:46:14.75,Default,,0000,0000,0000,,buffer and add more FIFO into the device\Nto smooth it out. On the other hand the Dialogue: 0,0:46:14.75,0:46:20.10,Default,,0000,0000,0000,,Xeon is performing really well. So it's\Nvery optimized. That said, we have tested Dialogue: 0,0:46:20.10,0:46:28.12,Default,,0000,0000,0000,,it with discreet card and it outperforms\Neverything by whooping five seven percent. Dialogue: 0,0:46:28.12,0:46:38.80,Default,,0000,0000,0000,,What you get four for the price. So this\Nis actually the end of the presentation. Dialogue: 0,0:46:38.80,0:46:43.84,Default,,0000,0000,0000,,We still have not scheduled any workshop,\Nbut if there if there is any interest in Dialogue: 0,0:46:43.84,0:46:53.39,Default,,0000,0000,0000,,actually seeing the device working or if\Nyou interested in learning more about the Dialogue: 0,0:46:53.39,0:46:58.26,Default,,0000,0000,0000,,PCI Express in details let us know we'll\Nschedule something in the next few days. Dialogue: 0,0:46:58.26,0:47:05.34,Default,,0000,0000,0000,,That's the end, I think we can proceed\Nwith questions if there are any. Dialogue: 0,0:47:05.34,0:47:14.95,Default,,0000,0000,0000,,{\i1}Applause{\i0}\NHerald: Okay, thank you very much. If you Dialogue: 0,0:47:14.95,0:47:17.68,Default,,0000,0000,0000,,are leaving now: please try to leave\Nquietly because we might have some Dialogue: 0,0:47:17.68,0:47:22.96,Default,,0000,0000,0000,,questions and you want to hear them. If\Nyou have questions please line up right Dialogue: 0,0:47:22.96,0:47:28.82,Default,,0000,0000,0000,,behind the microphones and I think we'll\Njust wait because we don't have anything Dialogue: 0,0:47:28.82,0:47:34.99,Default,,0000,0000,0000,,from the signal angel. However, if you are\Nwatching on stream you can hop into the Dialogue: 0,0:47:34.99,0:47:39.50,Default,,0000,0000,0000,,channels and over social media to ask\Nquestions and they will be answered, Dialogue: 0,0:47:39.50,0:47:47.89,Default,,0000,0000,0000,,hopefully. So on that microphone.\NQuestion 1: What's the minimum and maximum Dialogue: 0,0:47:47.89,0:47:52.17,Default,,0000,0000,0000,,frequency of the card?\NAlexander Chemeris: You mean RF Dialogue: 0,0:47:52.17,0:47:55.94,Default,,0000,0000,0000,,frequency?\NQuestion 1: No, the minimum frequency you Dialogue: 0,0:47:55.94,0:48:05.64,Default,,0000,0000,0000,,can sample at. the most SDR devices can\Nonly sample at over 50 MHz. Is there a Dialogue: 0,0:48:05.64,0:48:09.19,Default,,0000,0000,0000,,similar limitation at your card?\NAlexander Chemeris: Yeah, so if you're Dialogue: 0,0:48:09.19,0:48:15.65,Default,,0000,0000,0000,,talking about RF frequency it can go\Nfrom like almost zero even though that Dialogue: 0,0:48:15.65,0:48:27.29,Default,,0000,0000,0000,,works worse below 50MHz and all the way to\N3.8GHz if I remember correctly. And in Dialogue: 0,0:48:27.29,0:48:34.88,Default,,0000,0000,0000,,terms of the sample rate right now it\Nworks from like about 2 MSPS and to about Dialogue: 0,0:48:34.88,0:48:40.09,Default,,0000,0000,0000,,50 right now. But again, we're planning to\Nget it to these numbers we quoted. Dialogue: 0,0:48:40.09,0:48:45.72,Default,,0000,0000,0000,,Herald: Okay. The microphone over there.\NQuestion 2: Thanks for your talk. Did you Dialogue: 0,0:48:45.72,0:48:48.63,Default,,0000,0000,0000,,manage to put your Linux kernel driver to\Nthe main line? Dialogue: 0,0:48:48.63,0:48:53.52,Default,,0000,0000,0000,,Alexander Chemeris: No, not yet. I mean,\Nit's not even like fully published. So I Dialogue: 0,0:48:53.52,0:48:59.02,Default,,0000,0000,0000,,did not say in the beginning, sorry for\Nthis. We only just manufactured the first Dialogue: 0,0:48:59.02,0:49:03.83,Default,,0000,0000,0000,,prototype, which we debugged heavily. So\Nwe are only planning to manufacture the Dialogue: 0,0:49:03.83,0:49:10.29,Default,,0000,0000,0000,,second prototype with all these fixes and\Nthen we will release, like, the kernel Dialogue: 0,0:49:10.29,0:49:16.70,Default,,0000,0000,0000,,driver and everything. And maybe we'll try\Nor maybe won't try, haven't decided yet. Dialogue: 0,0:49:16.70,0:49:18.31,Default,,0000,0000,0000,,Question 2: Thanks\NHerald: Okay... Dialogue: 0,0:49:18.31,0:49:21.60,Default,,0000,0000,0000,,Alexander Chemeris: and that will be the\Nwhole other experience. Dialogue: 0,0:49:21.60,0:49:26.10,Default,,0000,0000,0000,,Herald: Okay, over there.\NQuestion 3: Hey, looks like you went Dialogue: 0,0:49:26.10,0:49:30.35,Default,,0000,0000,0000,,through some incredible amounts of pain to\Nmake this work. So, I was wondering, Dialogue: 0,0:49:30.35,0:49:34.96,Default,,0000,0000,0000,,aren't there any simulators at least for\Nparts of the system, or the PCIe bus for Dialogue: 0,0:49:34.96,0:49:40.15,Default,,0000,0000,0000,,the DMA something? Any simulator so that\Nyou can actually first design the system Dialogue: 0,0:49:40.15,0:49:44.63,Default,,0000,0000,0000,,there and debug it more easily?\NSergey Kostanbaev: Yes, there are Dialogue: 0,0:49:44.63,0:49:50.40,Default,,0000,0000,0000,,available simulators, but the problem's\Nall there are non-free. So you have to pay Dialogue: 0,0:49:50.40,0:49:57.11,Default,,0000,0000,0000,,for them. So yeah and we choose the hard\Nway. Dialogue: 0,0:49:57.11,0:49:59.52,Default,,0000,0000,0000,,Question 3: Okay thanks.\NHerald: We have a question from the signal Dialogue: 0,0:49:59.52,0:50:03.18,Default,,0000,0000,0000,,angel.\NQuestion 4: Yeah are the FPGA codes, Linux Dialogue: 0,0:50:03.18,0:50:07.65,Default,,0000,0000,0000,,driver, and library code, and the design\Nproject files public and if so, did they Dialogue: 0,0:50:07.65,0:50:13.48,Default,,0000,0000,0000,,post them yet? They can't find them on\Nxtrx.io. Dialogue: 0,0:50:13.48,0:50:17.97,Default,,0000,0000,0000,,Alexander Chemeris: Yeah, so they're not\Npublished yet. As I said, we haven't Dialogue: 0,0:50:17.97,0:50:24.58,Default,,0000,0000,0000,,released them. So, the drivers and\Nlibraries will definitely be available, Dialogue: 0,0:50:24.58,0:50:28.59,Default,,0000,0000,0000,,FPGA code... We are considering this\Nprobably also will be available in open Dialogue: 0,0:50:28.59,0:50:36.36,Default,,0000,0000,0000,,source. But we will publish them together\Nwith the public announcement of the Dialogue: 0,0:50:36.36,0:50:42.22,Default,,0000,0000,0000,,device.\NHerald: Ok, that microphone. Dialogue: 0,0:50:42.22,0:50:46.01,Default,,0000,0000,0000,,Question 5: Yes. Did you guys see any\Nsignal integrity issues between on the PCI Dialogue: 0,0:50:46.01,0:50:50.01,Default,,0000,0000,0000,,bus, or on this bus to the LMS chip, the\NLime microchip, I think, this doing Dialogue: 0,0:50:50.01,0:50:51.01,Default,,0000,0000,0000,,the RF ?\NAC: Right. Dialogue: 0,0:50:51.01,0:50:56.36,Default,,0000,0000,0000,,Question 5: Did you try to measure signal\Nintegrity issues, or... because there were Dialogue: 0,0:50:56.36,0:51:01.13,Default,,0000,0000,0000,,some reliability issues, right?\NAC: Yeah, we actually... so, PCI. With PCI Dialogue: 0,0:51:01.13,0:51:02.56,Default,,0000,0000,0000,,we never had issues, if I remember\Ncorrectly. Dialogue: 0,0:51:02.56,0:51:04.76,Default,,0000,0000,0000,,SK: No.\NAC: I just... it was just working. Dialogue: 0,0:51:04.76,0:51:10.94,Default,,0000,0000,0000,,SK: Well, the board is so small, and when\Nthere are small traces there's no problem Dialogue: 0,0:51:10.94,0:51:14.79,Default,,0000,0000,0000,,in signal integrity. So it's actually\Nsaved us. Dialogue: 0,0:51:14.79,0:51:20.60,Default,,0000,0000,0000,,AC: Yeah. Designing a small board is easier.\NYeah, with the LMS 7, the problem is not Dialogue: 0,0:51:20.60,0:51:26.10,Default,,0000,0000,0000,,the signal integrity in terms of\Ndifference in the length of the traces, Dialogue: 0,0:51:26.10,0:51:37.32,Default,,0000,0000,0000,,but rather the fact that the signal\Ndegrades over voltage, also over speed in Dialogue: 0,0:51:37.32,0:51:44.01,Default,,0000,0000,0000,,terms of voltage, and drops below the\Ndetection level, and all this stuff. We Dialogue: 0,0:51:44.01,0:51:47.22,Default,,0000,0000,0000,,use some measurements. I actually wanted\Nto add some pictures here, but decided Dialogue: 0,0:51:47.22,0:51:54.36,Default,,0000,0000,0000,,that's not going to be super interesting.\NH: Okay. Microphone over there. Dialogue: 0,0:51:54.36,0:51:58.36,Default,,0000,0000,0000,,Question 6: Yes. Thanks for the talk. How\Nmuch work would it be to convert the two Dialogue: 0,0:51:58.36,0:52:05.61,Default,,0000,0000,0000,,by two SDR into an 8-input logic analyzer\Nin terms of hard- and software? So, if you Dialogue: 0,0:52:05.61,0:52:12.29,Default,,0000,0000,0000,,have a really fast logic analyzer, where\Nyou can record unlimited traces with? Dialogue: 0,0:52:12.29,0:52:18.98,Default,,0000,0000,0000,,AC: A logic analyzer...\NQ6: So basically it's just also an analog Dialogue: 0,0:52:18.98,0:52:27.04,Default,,0000,0000,0000,,digital converter and you largely want\Nfast sampling and a large amount of memory Dialogue: 0,0:52:27.04,0:52:30.90,Default,,0000,0000,0000,,to store the traces.\NAC: Well, I just think it's not the best Dialogue: 0,0:52:30.90,0:52:40.30,Default,,0000,0000,0000,,use for it. It's probably... I don't know.\NMaybe Sergey has any ideas, but I think it Dialogue: 0,0:52:40.30,0:52:47.55,Default,,0000,0000,0000,,just may be easier to get high-speed ADC\Nand replace the Lime chip with a high- Dialogue: 0,0:52:47.55,0:52:56.72,Default,,0000,0000,0000,,speed ADC to get what you want, because\Nthe Lime chip has so many things there Dialogue: 0,0:52:56.72,0:53:01.45,Default,,0000,0000,0000,,specifically for RF.\NSK: Yeah, the main problem you cannot just Dialogue: 0,0:53:01.45,0:53:09.10,Default,,0000,0000,0000,,sample original data. You should shift it\Nover frequency, so you cannot sample Dialogue: 0,0:53:09.10,0:53:16.62,Default,,0000,0000,0000,,original signal, and using it for\Nsomething else except spectrum analyzing Dialogue: 0,0:53:16.62,0:53:20.84,Default,,0000,0000,0000,,is hard.\NQ6: OK. Thanks. Dialogue: 0,0:53:20.84,0:53:25.75,Default,,0000,0000,0000,,H: OK. Another question from the internet.\NSignal angel: Yes. Have you compared the Dialogue: 0,0:53:25.75,0:53:32.24,Default,,0000,0000,0000,,sample rate of the ADC of the Lime DA chip\Nto the USRP ADCs, and if so, how does the Dialogue: 0,0:53:32.24,0:53:40.16,Default,,0000,0000,0000,,lower sample rate affect the performance?\NAC: So, comparing low sample rate to Dialogue: 0,0:53:40.16,0:53:49.28,Default,,0000,0000,0000,,higher sample rate. We haven't done much\Ntesting on the RF performance yet, because Dialogue: 0,0:53:49.28,0:53:58.44,Default,,0000,0000,0000,,we were so busy with all this stuff, so we\Nare yet to see in terms of low bit rates Dialogue: 0,0:53:58.44,0:54:03.19,Default,,0000,0000,0000,,versus sample rates versus high sample\Nrate. Well, high sample rate always gives Dialogue: 0,0:54:03.19,0:54:09.86,Default,,0000,0000,0000,,you better performance, but you also get\Nhigher power consumption. So, I guess it's Dialogue: 0,0:54:09.86,0:54:14.02,Default,,0000,0000,0000,,the question of what's more more important\Nfor you. Dialogue: 0,0:54:14.02,0:54:20.44,Default,,0000,0000,0000,,H: Okay. Over there.\NQuestion 7: I've gathered there is no Dialogue: 0,0:54:20.44,0:54:25.32,Default,,0000,0000,0000,,mixer bypass, so you can't directly sample\Nthe signal. Is there a way to use the same Dialogue: 0,0:54:25.32,0:54:31.72,Default,,0000,0000,0000,,antenna for send and receive, yet.\NAC: Actually, there is... Input for ADC. Dialogue: 0,0:54:31.72,0:54:38.29,Default,,0000,0000,0000,,SK: But it's not a bypass, it's a\Ndedicated pin on LMS chip, and since we're Dialogue: 0,0:54:38.29,0:54:45.57,Default,,0000,0000,0000,,very space-constrained, we didn't route\Nthem, so you can not actually bypass it. Dialogue: 0,0:54:45.57,0:54:50.36,Default,,0000,0000,0000,,AC: Okay, in our specific hardware, so in\Ngeneral, so in the LMS chip there is a Dialogue: 0,0:54:50.36,0:54:58.17,Default,,0000,0000,0000,,special pin which allows you to drive your\Nsignal directly to ADC without all the Dialogue: 0,0:54:58.17,0:55:02.95,Default,,0000,0000,0000,,mixers, filters, all this radio stuff,\Njust directly to ADC. So, yes, Dialogue: 0,0:55:02.95,0:55:06.87,Default,,0000,0000,0000,,theoretically that's possible.\NSK: We even thought about this, but it Dialogue: 0,0:55:06.87,0:55:10.96,Default,,0000,0000,0000,,doesn't fit this design.\NQ7: Okay. And can I share antennas, Dialogue: 0,0:55:10.96,0:55:15.70,Default,,0000,0000,0000,,because I have an existing laptop with\Nexisting antennas, but I would use the Dialogue: 0,0:55:15.70,0:55:22.14,Default,,0000,0000,0000,,same antenna to send and receive.\NAC: Yeah, so, I mean, that's... depends on Dialogue: 0,0:55:22.14,0:55:25.62,Default,,0000,0000,0000,,what exactly do you want to do. If you\Nwant a TDG system, then yes, if you Dialogue: 0,0:55:25.62,0:55:30.87,Default,,0000,0000,0000,,want an FDG system, then you will have to\Nput a small duplexer in there, but yeah, Dialogue: 0,0:55:30.87,0:55:34.84,Default,,0000,0000,0000,,that's the idea. So you can plug this into\Nyour laptop and use your existing Dialogue: 0,0:55:34.84,0:55:39.64,Default,,0000,0000,0000,,antennas. That's one of the ideas of how\Nto use xtrx. Dialogue: 0,0:55:39.64,0:55:41.80,Default,,0000,0000,0000,,Q7: Yeah, because there's all four\Nconnectors. Dialogue: 0,0:55:41.80,0:55:45.40,Default,,0000,0000,0000,,AC: Yeah. One thing which I actually\Nforgot to mention is - I kind of mentioned Dialogue: 0,0:55:45.40,0:55:53.93,Default,,0000,0000,0000,,in the slides - is that any other SDRs\Nwhich are based on Ethernet or on the USB Dialogue: 0,0:55:53.93,0:56:02.31,Default,,0000,0000,0000,,can't work with a CSMA wireless systems,\Nand the most famous CSMA system is Wi-Fi. Dialogue: 0,0:56:02.31,0:56:09.26,Default,,0000,0000,0000,,So, it turns out that because of the\Nlatency between your operating system and Dialogue: 0,0:56:09.26,0:56:17.57,Default,,0000,0000,0000,,your radio on USB, you just can't react\Nfast enough for Wi-Fi to work, because you Dialogue: 0,0:56:17.57,0:56:23.24,Default,,0000,0000,0000,,- probably you know that - in Wi-Fi you\Ncarrier sense, and if you sense that the Dialogue: 0,0:56:23.24,0:56:29.58,Default,,0000,0000,0000,,spectrum is free, you start transmitting.\NDoes make a sense when you have huge Dialogue: 0,0:56:29.58,0:56:36.16,Default,,0000,0000,0000,,latency, because you all know that... you\Nknow the spectrum was free back then, so, Dialogue: 0,0:56:36.16,0:56:43.73,Default,,0000,0000,0000,,with xtrx, you actually can work with CSMA\Nsystems like Wi-Fi, so again it makes it Dialogue: 0,0:56:43.73,0:56:51.39,Default,,0000,0000,0000,,possible to have a fully software\Nimplementation of Wi-Fi in your laptop. It Dialogue: 0,0:56:51.39,0:56:58.66,Default,,0000,0000,0000,,obviously won't work like as good as your\Ncommercial Wi-Fi, because you will have to Dialogue: 0,0:56:58.66,0:57:03.84,Default,,0000,0000,0000,,do a lot of processing on your CPU, but\Nfor some purposes like experimentation, Dialogue: 0,0:57:03.84,0:57:07.98,Default,,0000,0000,0000,,for example, for wireless labs and R&D\Nlabs, that's really valuable. Dialogue: 0,0:57:07.98,0:57:11.40,Default,,0000,0000,0000,,Q7: Thanks.\NH: Okay. Over there. Dialogue: 0,0:57:11.40,0:57:15.52,Default,,0000,0000,0000,,Q8: Okay. what PCB design package did you\Nuse?. Dialogue: 0,0:57:15.52,0:57:17.82,Default,,0000,0000,0000,,AC: Altium.\NSK: Altium, yeah. Dialogue: 0,0:57:17.82,0:57:22.94,Default,,0000,0000,0000,,Q8: And I'd be interested in the PCIe\Nworkshop. Would be really great if you do Dialogue: 0,0:57:22.94,0:57:24.94,Default,,0000,0000,0000,,this one.\NAC: Say this again? Dialogue: 0,0:57:24.94,0:57:28.07,Default,,0000,0000,0000,,Q8: Would be really great if you do the\NPCI Express workshop. Dialogue: 0,0:57:28.07,0:57:32.72,Default,,0000,0000,0000,,AC: Ah. PCI Express workshop. Okay. Thank\Nyou. Dialogue: 0,0:57:32.72,0:57:36.69,Default,,0000,0000,0000,,H: Okay, I think we have one more question\Nfrom the microphones, and that's you. Dialogue: 0,0:57:36.69,0:57:42.88,Default,,0000,0000,0000,,Q9: Okay. Great talk. And again, I would\Nappreciate a PCI Express workshop, if it Dialogue: 0,0:57:42.88,0:57:47.19,Default,,0000,0000,0000,,ever happens. What are these\Nsynchronization options between multiple Dialogue: 0,0:57:47.19,0:57:55.09,Default,,0000,0000,0000,,cards. Can you synchronize the ADC clock,\Nand can you synchronize the presumably Dialogue: 0,0:57:55.09,0:58:04.61,Default,,0000,0000,0000,,digitally created IF? SK: Yes, so... so,\Nunfortunately, just IF synchronization is Dialogue: 0,0:58:04.61,0:58:10.28,Default,,0000,0000,0000,,not possible, because Lime chip doesn't\Nexpose a low frequency. But we can Dialogue: 0,0:58:10.28,0:58:16.00,Default,,0000,0000,0000,,synchronize digitally. So, we have special\None PPS signal synchronization. We have Dialogue: 0,0:58:16.00,0:58:25.18,Default,,0000,0000,0000,,lines for clock synchronization and other\Nstuff. We can do it in software. So the Dialogue: 0,0:58:25.18,0:58:31.79,Default,,0000,0000,0000,,Lime chip has phase correction register,\Nso when you measure... if there is a phase Dialogue: 0,0:58:31.79,0:58:35.17,Default,,0000,0000,0000,,difference, so you can compensate it on\Ndifferent boards. Dialogue: 0,0:58:35.17,0:58:39.31,Default,,0000,0000,0000,,Q9: Tune to a station a long way away and\Nthen rotate the phase until it aligns. Dialogue: 0,0:58:39.31,0:58:41.82,Default,,0000,0000,0000,,SK: Yeah.\NQ9: Thank you. Dialogue: 0,0:58:41.82,0:58:46.34,Default,,0000,0000,0000,,AC: Little tricky, but possible. So,\Nthat's one of our plans for future, Dialogue: 0,0:58:46.34,0:58:52.82,Default,,0000,0000,0000,,because we do want to see, like 128 by 128\NMIMO at home. Dialogue: 0,0:58:52.82,0:58:56.06,Default,,0000,0000,0000,,H: Okay, we have another question from the\Ninternet. Dialogue: 0,0:58:56.06,0:59:00.45,Default,,0000,0000,0000,,Signal angel: I actually have two\Nquestions. The first one is: What is the Dialogue: 0,0:59:00.45,0:59:07.71,Default,,0000,0000,0000,,expected price after a prototype stage?\NAnd the second one is: Can you tell us Dialogue: 0,0:59:07.71,0:59:10.40,Default,,0000,0000,0000,,more about this setup you had for\Ndebugging the PCIe Dialogue: 0,0:59:10.40,0:59:15.97,Default,,0000,0000,0000,,issues?\NAC: Could you repeat the second question? Dialogue: 0,0:59:15.97,0:59:20.27,Default,,0000,0000,0000,,SK: It's ????????????, I think.\NSA: It's more about the setup you had for Dialogue: 0,0:59:20.27,0:59:24.48,Default,,0000,0000,0000,,debugging the PCIe issues.\NSK: Second question, I think it's most Dialogue: 0,0:59:24.48,0:59:31.20,Default,,0000,0000,0000,,about our next workshop, because it's a\Nmore complicated setup, so... mostly Dialogue: 0,0:59:31.20,0:59:35.58,Default,,0000,0000,0000,,remove everything about its now current\Npresentation. Dialogue: 0,0:59:35.58,0:59:39.58,Default,,0000,0000,0000,,AC: Yeah, but in general, and in terms of\Nhardware setup, that was our hardware Dialogue: 0,0:59:39.58,0:59:47.89,Default,,0000,0000,0000,,setup, so we bought this PCI Express to\NThunderbolt3, we bought the laptop which Dialogue: 0,0:59:47.89,0:59:53.09,Default,,0000,0000,0000,,supports Thunderbolt3, and that's how we\Nwere debugging it. So, we don't need, like Dialogue: 0,0:59:53.09,0:59:57.78,Default,,0000,0000,0000,,a full-fledged PC, we don't have to\Nrestart it all the time. So, in terms of Dialogue: 0,0:59:57.78,1:00:06.65,Default,,0000,0000,0000,,price, we don't have the fixed price yet.\NSo, all I can say right now is that we are Dialogue: 0,1:00:06.65,1:00:18.35,Default,,0000,0000,0000,,targeting no more than your bladeRF or\NHackRF devices, and probably even cheaper. Dialogue: 0,1:00:18.35,1:00:25.21,Default,,0000,0000,0000,,For some versions.\NH: Okay. We are out of time, so thank you Dialogue: 0,1:00:25.21,1:00:45.08,Default,,0000,0000,0000,,again Sergey and Alexander.\N[Applause] Dialogue: 0,1:00:45.08,1:00:49.62,Default,,0000,0000,0000,,[Music] Dialogue: 0,1:00:49.62,1:00:54.95,Default,,0000,0000,0000,,subtitles created by c3subtitles.de\Nin the year 20??. Join, and help us!