[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:14.31,Default,,0000,0000,0000,,{\i1}33C3 preroll music{\i0} Dialogue: 0,0:00:14.31,0:00:17.38,Default,,0000,0000,0000,,Herald-Angel: Tim ‘mithro’ Ansell\Nhas come all the way from Australia Dialogue: 0,0:00:17.38,0:00:24.51,Default,,0000,0000,0000,,to talk to us about ‘Dissecting HDMI’\Nand developing an open FPGA-based Dialogue: 0,0:00:24.51,0:00:29.93,Default,,0000,0000,0000,,capture hardware for sharing\Ntalks outside of the room. Dialogue: 0,0:00:29.93,0:00:34.68,Default,,0000,0000,0000,,And he will be explaining how\Nto dissect it. And I’m looking forward Dialogue: 0,0:00:34.68,0:00:38.62,Default,,0000,0000,0000,,to hearing the talk in a second.\NAnd so please give Tim Dialogue: 0,0:00:38.62,0:00:41.33,Default,,0000,0000,0000,,a warm round of applause\Nagain. Thank you! Dialogue: 0,0:00:41.33,0:00:50.52,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:00:50.52,0:00:56.15,Default,,0000,0000,0000,,Tim Ansell: Okay, hi, I’m Tim, and\Nin theory, if my slides change Dialogue: 0,0:00:56.15,0:01:02.55,Default,,0000,0000,0000,,you would see that. Dialogue: 0,0:01:02.55,0:01:08.54,Default,,0000,0000,0000,,And I kind of have too many projects.\NAnd I’m gonna be discussing one of them. Dialogue: 0,0:01:08.54,0:01:11.89,Default,,0000,0000,0000,,This is another project that\NI gave a lightning talk on earlier. Dialogue: 0,0:01:11.89,0:01:18.72,Default,,0000,0000,0000,,If you didn’t see it, it’s an ARM\Nmicrocontroller that goes in your USB port. Dialogue: 0,0:01:18.72,0:01:22.00,Default,,0000,0000,0000,,People wanted to know\Nwhen to hack on it. Dialogue: 0,0:01:22.00,0:01:25.52,Default,,0000,0000,0000,,Tomorrow at 2 PM, apparently. Dialogue: 0,0:01:25.52,0:01:28.99,Default,,0000,0000,0000,,So, the first that I want to say is\NI’m a software developer. Dialogue: 0,0:01:28.99,0:01:33.34,Default,,0000,0000,0000,,I’m not a hardware designer,\NI’m not an FPGA developer, Dialogue: 0,0:01:33.34,0:01:37.15,Default,,0000,0000,0000,,I’m not a professional in any of that. Dialogue: 0,0:01:37.15,0:01:42.92,Default,,0000,0000,0000,,I develop software for full time.\NSo this is my hobby. Dialogue: 0,0:01:42.92,0:01:50.03,Default,,0000,0000,0000,,As well, this information comes from\Na couple of projects that I started Dialogue: 0,0:01:50.03,0:01:55.26,Default,,0000,0000,0000,,but a lot of other people did the majority\Nof the work and I’m just telling you Dialogue: 0,0:01:55.26,0:02:00.18,Default,,0000,0000,0000,,about it because they are too shy\Nto come up and talk about it themselves. Dialogue: 0,0:02:00.18,0:02:05.43,Default,,0000,0000,0000,,So a big thank you to all these people\Nwho have helped me in various ways Dialogue: 0,0:02:05.43,0:02:09.79,Default,,0000,0000,0000,,regarding this. And theses slides – Dialogue: 0,0:02:09.79,0:02:13.70,Default,,0000,0000,0000,,any of the blue things are links, so\Nif your playing it along at home Dialogue: 0,0:02:13.70,0:02:18.84,Default,,0000,0000,0000,,you can get to them by that URL\Nand click on these things. Dialogue: 0,0:02:18.84,0:02:21.70,Default,,0000,0000,0000,,And there is probably other people I’ve\Nforgotten, who are not on this list. Dialogue: 0,0:02:21.70,0:02:24.53,Default,,0000,0000,0000,,I’m very sorry. Dialogue: 0,0:02:24.53,0:02:31.98,Default,,0000,0000,0000,,So this title of this talk could be called\N“Software guy tries hardware and complains”. Dialogue: 0,0:02:31.98,0:02:36.64,Default,,0000,0000,0000,,I’ve had a really hard time figuring out\Nwhat to call this talk. Dialogue: 0,0:02:36.64,0:02:41.21,Default,,0000,0000,0000,,And you’ll see some other attempts\Nof naming this talk better. Dialogue: 0,0:02:41.21,0:02:48.38,Default,,0000,0000,0000,,So a bit of history.\NHow do I end up doing HDMI stuff? Dialogue: 0,0:02:48.38,0:02:55.84,Default,,0000,0000,0000,,So TimVideos is a group of projects\Nwhich are trying to make it easy Dialogue: 0,0:02:55.84,0:03:02.78,Default,,0000,0000,0000,,to record and live-stream user groups\Nand conferences like this event. Dialogue: 0,0:03:02.78,0:03:07.40,Default,,0000,0000,0000,,However, we want to do it without\Nneeding the awesome team Dialogue: 0,0:03:07.40,0:03:09.75,Default,,0000,0000,0000,,that is doing the recording here. Dialogue: 0,0:03:09.75,0:03:12.95,Default,,0000,0000,0000,,These guys are really, really organized\Nand professional. Dialogue: 0,0:03:12.95,0:03:18.71,Default,,0000,0000,0000,,We want to do it where people have\Nno experience at all with AV, Dialogue: 0,0:03:18.71,0:03:22.11,Default,,0000,0000,0000,,and just can make it happen. Dialogue: 0,0:03:22.11,0:03:28.93,Default,,0000,0000,0000,,And so this is how you record\Na conference or user group. Dialogue: 0,0:03:28.93,0:03:31.75,Default,,0000,0000,0000,,I’m gonna be talking about\Nthese two things here, Dialogue: 0,0:03:31.75,0:03:35.52,Default,,0000,0000,0000,,the HDMI2USB devices that we created. Dialogue: 0,0:03:35.52,0:03:43.24,Default,,0000,0000,0000,,They are used in our setup both for\Ncamera capture and for capture of slides. Dialogue: 0,0:03:43.24,0:03:48.68,Default,,0000,0000,0000,,And so HDMI2USB is FOSS hardware\Nfor doing HDMI capture Dialogue: 0,0:03:48.68,0:03:54.88,Default,,0000,0000,0000,,and actually has a bit of history\Nwith the CCC Dialogue: 0,0:03:54.88,0:04:00.70,Default,,0000,0000,0000,,because it was inspired by\Na speaker who spoke here. Dialogue: 0,0:04:00.70,0:04:06.14,Default,,0000,0000,0000,,Bunnie spoke on his NeTV board Dialogue: 0,0:04:06.14,0:04:08.83,Default,,0000,0000,0000,,which was an FPGA Man-in-the-Middle attack Dialogue: 0,0:04:08.83,0:04:14.24,Default,,0000,0000,0000,,on HDCP-secured links. His talk\Nis really awesome. It’s gonna be… Dialogue: 0,0:04:14.24,0:04:17.49,Default,,0000,0000,0000,,that talk is way more technical\Nthan mine and gives you Dialogue: 0,0:04:17.49,0:04:22.46,Default,,0000,0000,0000,,some really awesome details about the\Ncool things he did to make that work. Dialogue: 0,0:04:22.46,0:04:26.99,Default,,0000,0000,0000,,Mine is much more basic. You don’t\Nneed much experience with HDMI Dialogue: 0,0:04:26.99,0:04:32.97,Default,,0000,0000,0000,,to follow my talk.\NOur device works like his does, Dialogue: 0,0:04:32.97,0:04:38.74,Default,,0000,0000,0000,,except his was deliberately designed\Nto not allow capture, Dialogue: 0,0:04:38.74,0:04:41.67,Default,,0000,0000,0000,,our design allows capture.\NIt effectively man-in-the-middles Dialogue: 0,0:04:41.67,0:04:46.95,Default,,0000,0000,0000,,the presenters projector,\Nbetween the presenters laptop Dialogue: 0,0:04:46.95,0:04:54.86,Default,,0000,0000,0000,,and the projector, and provides\Na high-quality capture out the USB2 port. Dialogue: 0,0:04:54.86,0:04:58.68,Default,,0000,0000,0000,,I use an FPGA to do that.\NThis is because Dialogue: 0,0:04:58.68,0:05:03.17,Default,,0000,0000,0000,,using FPGA makes hardware problems\Nsoftware problems, and as I said Dialogue: 0,0:05:03.17,0:05:09.11,Default,,0000,0000,0000,,I’m a software developer, I prefer\Nsoftware problems to hardware problems. Dialogue: 0,0:05:09.11,0:05:13.69,Default,,0000,0000,0000,,And the way it kind of works is\Nit appears as a UVC webcam so that Dialogue: 0,0:05:13.69,0:05:17.59,Default,,0000,0000,0000,,you can use it with Skype or Hangouts\Nor any of those things without needing Dialogue: 0,0:05:17.59,0:05:23.65,Default,,0000,0000,0000,,any drivers on sensible operating\Nsystems like MacOS and Linux. Dialogue: 0,0:05:23.65,0:05:27.62,Default,,0000,0000,0000,,On Windows you need a driver that\Ntells it to use the internal driver. Dialogue: 0,0:05:27.62,0:05:30.31,Default,,0000,0000,0000,,It’s kind of weird.\NAnd also a serial port Dialogue: 0,0:05:30.31,0:05:34.53,Default,,0000,0000,0000,,because we have the ability to switch\Nwhich input goes to which output. Dialogue: 0,0:05:34.53,0:05:38.61,Default,,0000,0000,0000,,It’s kind of like a matrix. Dialogue: 0,0:05:38.61,0:05:42.69,Default,,0000,0000,0000,,And so this the open source\Nhardware we designed. Dialogue: 0,0:05:42.69,0:05:49.16,Default,,0000,0000,0000,,It’s in KiCAD, you can find it on Github. Dialogue: 0,0:05:49.16,0:05:52.32,Default,,0000,0000,0000,,I’m quite proud of it.\NIt’s quite a good little kit. Dialogue: 0,0:05:52.32,0:05:58.05,Default,,0000,0000,0000,,We don’t use all the features of it yet,\Nbut it’s pretty awesome. Dialogue: 0,0:05:58.05,0:06:00.52,Default,,0000,0000,0000,,And it’s in use! Dialogue: 0,0:06:00.52,0:06:05.74,Default,,0000,0000,0000,,We used this technology to capture\Nat a bunch of conferences: Dialogue: 0,0:06:05.74,0:06:09.31,Default,,0000,0000,0000,,PyCon in Australia,\Nlinux.conf.au in Australia Dialogue: 0,0:06:09.31,0:06:11.84,Default,,0000,0000,0000,,– as I said, I’m Australian. Dialogue: 0,0:06:11.84,0:06:15.06,Default,,0000,0000,0000,,DebConf, though, are not Australian. Dialogue: 0,0:06:15.06,0:06:22.79,Default,,0000,0000,0000,,They used it in – sorry –\Nin South Africa, I think. Dialogue: 0,0:06:22.79,0:06:24.97,Default,,0000,0000,0000,,And there are a whole bunch of\Nother people around the world Dialogue: 0,0:06:24.97,0:06:27.64,Default,,0000,0000,0000,,who are using this,\Nwhich is pretty awesome. Dialogue: 0,0:06:27.64,0:06:31.14,Default,,0000,0000,0000,,The main reason I wanted it to be\Nopen source was so that Dialogue: 0,0:06:31.14,0:06:37.23,Default,,0000,0000,0000,,other people could use them\Nand learn from them and fix problems, Dialogue: 0,0:06:37.23,0:06:41.73,Default,,0000,0000,0000,,because there are a lot of problems\Nwe’ve run into. Dialogue: 0,0:06:41.73,0:06:44.59,Default,,0000,0000,0000,,And the other thing is\Nthis is all full of Python. Dialogue: 0,0:06:44.59,0:06:49.98,Default,,0000,0000,0000,,We do use Python Dialogue: 0,0:06:49.98,0:06:54.50,Default,,0000,0000,0000,,to create the firmware for the FPGA,\Nand all these other areas. Dialogue: 0,0:06:54.50,0:06:58.40,Default,,0000,0000,0000,,If you wanna find out more about that\Ngo to my talk at Python AU Dialogue: 0,0:06:58.40,0:07:02.68,Default,,0000,0000,0000,,which was recorded with the very device\NI’m talking about. Dialogue: 0,0:07:02.68,0:07:05.42,Default,,0000,0000,0000,,{\i1}microphone noise{\i0}\NOops, sorry! Dialogue: 0,0:07:05.42,0:07:11.76,Default,,0000,0000,0000,,But as I said, this is going\Nto include a lot of problems. Dialogue: 0,0:07:11.76,0:07:15.79,Default,,0000,0000,0000,,The first one is:\NPeople still use VGA! Dialogue: 0,0:07:15.79,0:07:19.43,Default,,0000,0000,0000,,This kind of makes me sad. Dialogue: 0,0:07:19.43,0:07:23.85,Default,,0000,0000,0000,,Because VGA is not HDMI.\NIt was invented in 1987 Dialogue: 0,0:07:23.85,0:07:25.96,Default,,0000,0000,0000,,and it’s an analog signal. Dialogue: 0,0:07:25.96,0:07:29.71,Default,,0000,0000,0000,,Well, HDMI shares some history\Nwith VGA. Dialogue: 0,0:07:29.71,0:07:34.67,Default,,0000,0000,0000,,You can’t use the same techniques\Nfor capturing HDMI that you can for VGA. Dialogue: 0,0:07:34.67,0:07:40.73,Default,,0000,0000,0000,,So why do you still use it?\NIt’s old and bad! Dialogue: 0,0:07:40.73,0:07:46.28,Default,,0000,0000,0000,,We developed a VGA expansion board\Nto effectively allow us to capture Dialogue: 0,0:07:46.28,0:07:49.01,Default,,0000,0000,0000,,VGA using the same thing. Dialogue: 0,0:07:49.01,0:07:52.70,Default,,0000,0000,0000,,By ‘developed’ I mean\Nwe have designed, and some exist Dialogue: 0,0:07:52.70,0:07:55.85,Default,,0000,0000,0000,,but nobody’s actually finished the\Nfirmware to make them work yet. Dialogue: 0,0:07:55.85,0:07:59.53,Default,,0000,0000,0000,,So, I’d love help there. Dialogue: 0,0:07:59.53,0:08:03.89,Default,,0000,0000,0000,,There is also another problem: Dialogue: 0,0:08:03.89,0:08:08.05,Default,,0000,0000,0000,,I want to do this\Nall open source, as I said. Dialogue: 0,0:08:08.05,0:08:12.19,Default,,0000,0000,0000,,The HDMI ecosystem has\Ncommercial cores you can buy Dialogue: 0,0:08:12.19,0:08:16.09,Default,,0000,0000,0000,,and they work reasonably well,\Nbut you have to buy them Dialogue: 0,0:08:16.09,0:08:19.55,Default,,0000,0000,0000,,and you don’t get the source code to them\Nor if you do get the source code to them Dialogue: 0,0:08:19.55,0:08:23.35,Default,,0000,0000,0000,,you can’t share them with other people. Dialogue: 0,0:08:23.35,0:08:27.39,Default,,0000,0000,0000,,As well, I wanted to be open source\Nbecause we wanted to solve Dialogue: 0,0:08:27.39,0:08:31.48,Default,,0000,0000,0000,,all those problems that people\Nhave when plugging in their laptop Dialogue: 0,0:08:31.48,0:08:34.32,Default,,0000,0000,0000,,and it not working. Dialogue: 0,0:08:34.32,0:08:38.97,Default,,0000,0000,0000,,And the commercial cores aren’t designed\Nto allow us to give the ability Dialogue: 0,0:08:38.97,0:08:46.55,Default,,0000,0000,0000,,to do that –\Nsolve those problems permanently. Dialogue: 0,0:08:46.55,0:08:48.50,Default,,0000,0000,0000,,So we create a new implementation! Dialogue: 0,0:08:48.50,0:08:52.13,Default,,0000,0000,0000,,As anybody who has ever done a\Nreimplementation or a new implementation Dialogue: 0,0:08:52.13,0:08:59.43,Default,,0000,0000,0000,,or something, it means that you got\Nnew bugs which I all describe quite a bit. Dialogue: 0,0:08:59.43,0:09:01.35,Default,,0000,0000,0000,,So this talk could be called Dialogue: 0,0:09:01.35,0:09:06.40,Default,,0000,0000,0000,,‘Debugging HDMI’ rather than\N‘Dissecting HDMI’ because it includes Dialogue: 0,0:09:06.40,0:09:11.59,Default,,0000,0000,0000,,a lot of information about\Nhow things went wrong. Dialogue: 0,0:09:11.59,0:09:16.56,Default,,0000,0000,0000,,Ok, that’s kind of the introduction of why\Nwe are here and why I’m talking about this. Dialogue: 0,0:09:16.56,0:09:22.54,Default,,0000,0000,0000,,So how does HDMI work? Dialogue: 0,0:09:22.54,0:09:26.48,Default,,0000,0000,0000,,Well, HDMI is actually reasonably old now. Dialogue: 0,0:09:26.48,0:09:30.70,Default,,0000,0000,0000,,It was created in 2002. Dialogue: 0,0:09:30.70,0:09:37.29,Default,,0000,0000,0000,,It’s based on the DVI specification.\NDVI was created in 1999. Dialogue: 0,0:09:37.29,0:09:41.28,Default,,0000,0000,0000,,So DVI is 17 years old. Dialogue: 0,0:09:41.28,0:09:49.07,Default,,0000,0000,0000,,And DVI was designed to replace VGA\Nand shares a lot of similar history. Dialogue: 0,0:09:49.07,0:09:55.98,Default,,0000,0000,0000,,HDMI is backwards compatible with DVI\Nelectrically and protocol wise, Dialogue: 0,0:09:55.98,0:09:58.53,Default,,0000,0000,0000,,but uses a different connector. Dialogue: 0,0:09:58.53,0:10:02.75,Default,,0000,0000,0000,,This is a HDMI connector.\NYou’ve probably seen them all before. Dialogue: 0,0:10:02.75,0:10:10.22,Default,,0000,0000,0000,,If you look closely you see that\Nthere are 19 pins on the HDMI connector. Dialogue: 0,0:10:10.22,0:10:13.30,Default,,0000,0000,0000,,That’s Pin 1. Dialogue: 0,0:10:13.30,0:10:15.35,Default,,0000,0000,0000,,So what do all this pins do? Dialogue: 0,0:10:15.35,0:10:18.47,Default,,0000,0000,0000,,There are five pins\Nwhich are used for Ground. Dialogue: 0,0:10:18.47,0:10:24.83,Default,,0000,0000,0000,,There is one pin which is used for Power,\Nit gives you 5 volts at 50 milliamps. Dialogue: 0,0:10:24.83,0:10:28.41,Default,,0000,0000,0000,,This isn’t much.\NYou can’t do much with 50 milliamps Dialogue: 0,0:10:28.41,0:10:35.78,Default,,0000,0000,0000,,except maybe some type of adapter,\Nconverter or power a whole microcontroller. Dialogue: 0,0:10:35.78,0:10:39.29,Default,,0000,0000,0000,,Some Chinese devices try\Nto draw like an amp from this. Dialogue: 0,0:10:39.29,0:10:45.37,Default,,0000,0000,0000,,That’s not very good. So that’s another\Nthing you should watch out for. Dialogue: 0,0:10:45.37,0:10:51.52,Default,,0000,0000,0000,,There are three high speed data pairs\Nwhich transmit the actual video data. Dialogue: 0,0:10:51.52,0:10:57.73,Default,,0000,0000,0000,,And they share a clock pair.\NSo that’s these pins here. Dialogue: 0,0:10:57.73,0:11:02.37,Default,,0000,0000,0000,,And then there are five pins\Nwhich are used for low speed data. Dialogue: 0,0:11:02.37,0:11:06.74,Default,,0000,0000,0000,,So that’s all the pins\Non the HDMI connector. Dialogue: 0,0:11:06.74,0:11:12.74,Default,,0000,0000,0000,,You might have noticed that there was\Na whole bunch of different things Dialogue: 0,0:11:12.74,0:11:16.63,Default,,0000,0000,0000,,I said there. And you need to actually\Nunderstand a whole bunch Dialogue: 0,0:11:16.63,0:11:21.51,Default,,0000,0000,0000,,of different protocols\Nto understand how HDMI works. Dialogue: 0,0:11:21.51,0:11:27.71,Default,,0000,0000,0000,,There is bunch of low speed ones\Nand there is a bunch of high speed ones. Dialogue: 0,0:11:27.71,0:11:31.91,Default,,0000,0000,0000,,I’m not gonna talk\Nabout all of those protocols Dialogue: 0,0:11:31.91,0:11:35.81,Default,,0000,0000,0000,,because there is just too many\Nto go into an hour talk. Dialogue: 0,0:11:35.81,0:11:38.39,Default,,0000,0000,0000,,The low speed protocol\NI’m not gonna talk about is Dialogue: 0,0:11:38.39,0:11:42.34,Default,,0000,0000,0000,,CEC or Audio Return;\Nand I’m not gonna talk about any of the Dialogue: 0,0:11:42.34,0:11:48.01,Default,,0000,0000,0000,,Auxiliary Data protocol\Nthat is high speed, or HDCP. Dialogue: 0,0:11:48.01,0:11:50.86,Default,,0000,0000,0000,,If you want HDCP go\Nand look at bunnie’s talk. Dialogue: 0,0:11:50.86,0:11:56.32,Default,,0000,0000,0000,,It’s much better than mine.\NBut… or ethernet! Dialogue: 0,0:11:56.32,0:12:02.46,Default,,0000,0000,0000,,What I will be talking about is\Nthe EDID and DDC protocols, Dialogue: 0,0:12:02.46,0:12:06.29,Default,,0000,0000,0000,,The 8b/10b encoding of the pixel data Dialogue: 0,0:12:06.29,0:12:10.14,Default,,0000,0000,0000,,and the 2b/10b encoding\Nof the control data. Dialogue: 0,0:12:10.14,0:12:14.01,Default,,0000,0000,0000,,Interesting enough this is actually DVI. Dialogue: 0,0:12:14.01,0:12:20.74,Default,,0000,0000,0000,,I’m not telling you about HDMI, I’m\Nreally describing to you how DVI works. Dialogue: 0,0:12:20.74,0:12:26.19,Default,,0000,0000,0000,,Again, many titles. Dialogue: 0,0:12:26.19,0:12:29.69,Default,,0000,0000,0000,,Starting with the low speed protocol: Dialogue: 0,0:12:29.69,0:12:33.01,Default,,0000,0000,0000,,EDID or DDC. Dialogue: 0,0:12:33.01,0:12:37.79,Default,,0000,0000,0000,,I’m gonna use these two terms\Ninterchangeably, Dialogue: 0,0:12:37.79,0:12:40.64,Default,,0000,0000,0000,,they’ve been so confused now\Nthat they are interchangeable, Dialogue: 0,0:12:40.64,0:12:43.60,Default,,0000,0000,0000,,in my opinion. Dialogue: 0,0:12:43.60,0:12:47.48,Default,,0000,0000,0000,,This is something they inherited from VGA. Dialogue: 0,0:12:47.48,0:12:52.93,Default,,0000,0000,0000,,It was invented and added\Nto VGA in August 1994. Dialogue: 0,0:12:52.93,0:12:56.58,Default,,0000,0000,0000,,It was for plug and play of monitors\Nso that you could plug in your monitor Dialogue: 0,0:12:56.58,0:13:02.43,Default,,0000,0000,0000,,and your graphics card would just work\Nrather than requiring you to tell Dialogue: 0,0:13:02.43,0:13:08.05,Default,,0000,0000,0000,,your graphics card exactly what resolution\Nand stuff your monitor worked at. Dialogue: 0,0:13:08.05,0:13:12.88,Default,,0000,0000,0000,,It uses I2C [I squared C]\Nand a small EEPROM. Dialogue: 0,0:13:12.88,0:13:16.29,Default,,0000,0000,0000,,These are the pins that it uses. Dialogue: 0,0:13:16.29,0:13:22.62,Default,,0000,0000,0000,,15 is the Clock pin and\N16 is the Data pin, Dialogue: 0,0:13:22.62,0:13:28.10,Default,,0000,0000,0000,,and then it uses the Ground, and the\N5 Volts is used to power that EEPROM. Dialogue: 0,0:13:28.10,0:13:32.79,Default,,0000,0000,0000,,And in some ways it also uses the 19\Nbecause 19 is how you detect Dialogue: 0,0:13:32.79,0:13:37.64,Default,,0000,0000,0000,,that there is something there\Nto read from. Dialogue: 0,0:13:37.64,0:13:40.57,Default,,0000,0000,0000,,It uses I2C. Dialogue: 0,0:13:40.57,0:13:46.19,Default,,0000,0000,0000,,I2C is a low speed protocol that runs\Nat either 100 kHz or 400 kHz. Dialogue: 0,0:13:46.19,0:13:50.86,Default,,0000,0000,0000,,Technically EDID is not I2C,\Nbut it is. Dialogue: 0,0:13:50.86,0:13:55.85,Default,,0000,0000,0000,,It only supports the 100 kHz version,\Nthough, in theory, Dialogue: 0,0:13:55.85,0:13:58.78,Default,,0000,0000,0000,,everything on this planet\Ncan be read at 400 kHz. Dialogue: 0,0:13:58.78,0:14:03.03,Default,,0000,0000,0000,,It is also very well explained elsewhere,\Nso I’m not going to explain in detail Dialogue: 0,0:14:03.03,0:14:09.09,Default,,0000,0000,0000,,what I2C is or does,\Nor how to implement it. Dialogue: 0,0:14:09.09,0:14:16.47,Default,,0000,0000,0000,,The EEPROM is a 24 series.\NIt’s found at I2C address 50. Dialogue: 0,0:14:16.47,0:14:21.68,Default,,0000,0000,0000,,It’s 8 bits in size which gives\Nyou 256 bytes of data. Dialogue: 0,0:14:21.68,0:14:28.24,Default,,0000,0000,0000,,Again, this EEPROM and how to talk to it\Nis very well described on internet. Dialogue: 0,0:14:28.24,0:14:31.31,Default,,0000,0000,0000,,So I’m not gonna to describe it here.\NIf you’ve used EEPROMs Dialogue: 0,0:14:31.31,0:14:36.43,Default,,0000,0000,0000,,over I2C it’s likely\Nyou’ve used a 24 series EEPROM. Dialogue: 0,0:14:36.43,0:14:42.79,Default,,0000,0000,0000,,Probably bigger ones,\N256 bytes is pretty small. Dialogue: 0,0:14:42.79,0:14:45.93,Default,,0000,0000,0000,,So like a 16 bits one, Dialogue: 0,0:14:45.93,0:14:51.90,Default,,0000,0000,0000,,but EDID supports only\Nthe 8 bits ones. Dialogue: 0,0:14:51.90,0:14:55.02,Default,,0000,0000,0000,,The kind of interesting part of EDID\Nis the data structure: Dialogue: 0,0:14:55.02,0:14:58.65,Default,,0000,0000,0000,,it’s a custom binary format that describes Dialogue: 0,0:14:58.65,0:15:02.04,Default,,0000,0000,0000,,what the contents of the EEPROM is. Dialogue: 0,0:15:02.04,0:15:05.41,Default,,0000,0000,0000,,Again, Wikipedia has a really\Ngood description of this. Dialogue: 0,0:15:05.41,0:15:07.86,Default,,0000,0000,0000,,So I’m not gonna go\Ninto much detail. Dialogue: 0,0:15:07.86,0:15:12.95,Default,,0000,0000,0000,,But the important thing is that it\Ndescribes resolution, frequency Dialogue: 0,0:15:12.95,0:15:17.59,Default,,0000,0000,0000,,and format for talking to the monitor. Dialogue: 0,0:15:17.59,0:15:20.72,Default,,0000,0000,0000,,This is really important because\Nif you try and send Dialogue: 0,0:15:20.72,0:15:25.47,Default,,0000,0000,0000,,the wrong resolution, frequency or format\Nthe monitor is not gonna understand it. Dialogue: 0,0:15:25.47,0:15:28.58,Default,,0000,0000,0000,,This is kind of what EDID is used for. Dialogue: 0,0:15:28.58,0:15:32.01,Default,,0000,0000,0000,,{\i1}sipping, sound of water bottle{\i0} Dialogue: 0,0:15:32.01,0:15:38.27,Default,,0000,0000,0000,,So this is where things\Nstart getting a bit hairy. Dialogue: 0,0:15:38.27,0:15:42.52,Default,,0000,0000,0000,,Presenters come up to the front and\Nthe first question you see anybody ask is: Dialogue: 0,0:15:42.52,0:15:44.60,Default,,0000,0000,0000,,What resolution do I use? Dialogue: 0,0:15:44.60,0:15:49.92,Default,,0000,0000,0000,,And they get a panel like this which\Nhas a bazillion of resolutions selected. Dialogue: 0,0:15:49.92,0:15:55.38,Default,,0000,0000,0000,,And the thing is, despite your monitor\Nsaying that it supports Dialogue: 0,0:15:55.38,0:15:59.92,Default,,0000,0000,0000,,many formats they lie. Dialogue: 0,0:15:59.92,0:16:05.28,Default,,0000,0000,0000,,It turns out that projectors lie\Na lot more than normal displays. Dialogue: 0,0:16:05.28,0:16:08.49,Default,,0000,0000,0000,,I don’t know why they are special. Dialogue: 0,0:16:08.49,0:16:11.56,Default,,0000,0000,0000,,So this is what a supported format\Nlooks like. Dialogue: 0,0:16:11.56,0:16:14.77,Default,,0000,0000,0000,,It’s really great. Dialogue: 0,0:16:14.77,0:16:19.24,Default,,0000,0000,0000,,As well, I care about\Ncapturing the data. Dialogue: 0,0:16:19.24,0:16:25.42,Default,,0000,0000,0000,,And so I want the things\Nin the format that is Dialogue: 0,0:16:25.42,0:16:27.23,Default,,0000,0000,0000,,easy for me to capture. Dialogue: 0,0:16:27.23,0:16:31.60,Default,,0000,0000,0000,,I also don’t to be scaling\Npeoples images and text Dialogue: 0,0:16:31.60,0:16:34.51,Default,,0000,0000,0000,,because scaling looks really bad.\NSo if someone selects Dialogue: 0,0:16:34.51,0:16:39.89,Default,,0000,0000,0000,,like a really low resolution and\Nwe scale it up it looks really horrible. Dialogue: 0,0:16:39.89,0:16:44.30,Default,,0000,0000,0000,,It makes text unreadable; and\Npresenters are very denounced, Dialogue: 0,0:16:44.30,0:16:47.98,Default,,0000,0000,0000,,especially at technical conferences,\Nfor using tiny, tiny fonts. Dialogue: 0,0:16:47.98,0:16:51.72,Default,,0000,0000,0000,,And so we need to use as much\Nresolution as we can. Dialogue: 0,0:16:51.72,0:16:55.65,Default,,0000,0000,0000,,How we solve this is we emulate\Nour own EEPROM in the FPGA Dialogue: 0,0:16:55.65,0:16:58.68,Default,,0000,0000,0000,,and ignore what the projector\Ntells us it can do. Dialogue: 0,0:16:58.68,0:17:03.01,Default,,0000,0000,0000,,We tell the presenter that this is\Nwhat we support. Dialogue: 0,0:17:03.01,0:17:06.69,Default,,0000,0000,0000,,You might notice that it kind of\Nsolves the problem Dialogue: 0,0:17:06.69,0:17:10.51,Default,,0000,0000,0000,,of what resolution we do. Dialogue: 0,0:17:10.51,0:17:11.81,Default,,0000,0000,0000,,Offer a single solution… Dialogue: 0,0:17:11.81,0:17:16.50,Default,,0000,0000,0000,,offer a single option makes it\Nvery hard to choose the wrong one. Dialogue: 0,0:17:16.50,0:17:19.84,Default,,0000,0000,0000,,That’s good! We solved the problem! Dialogue: 0,0:17:19.84,0:17:22.78,Default,,0000,0000,0000,,No, we haven’t solved the problem. Dialogue: 0,0:17:22.78,0:17:25.39,Default,,0000,0000,0000,,We were recording PyCon AU\Nand we found that Dialogue: 0,0:17:25.39,0:17:31.12,Default,,0000,0000,0000,,some Mac laptops were\Nrefusing to work. Dialogue: 0,0:17:31.12,0:17:34.57,Default,,0000,0000,0000,,To understand the cause of this\Nyou need to understand Dialogue: 0,0:17:34.57,0:17:36.97,Default,,0000,0000,0000,,a little bit about how the world works. Dialogue: 0,0:17:36.97,0:17:41.12,Default,,0000,0000,0000,,There are two major frequencies\Nin the world: 50 Hz and 60 Hz. Dialogue: 0,0:17:41.12,0:17:43.80,Default,,0000,0000,0000,,50 Hz is mainly used\Nin the “Rest of the World” Dialogue: 0,0:17:43.80,0:17:47.37,Default,,0000,0000,0000,,and 60 Hz is used in America\Nand Japan and a few other places Dialogue: 0,0:17:47.37,0:17:51.87,Default,,0000,0000,0000,,but that’s kind of a very rough thing. Dialogue: 0,0:17:51.87,0:17:54.56,Default,,0000,0000,0000,,Laptop sold in Australia,\NAustralia is 50 Hz. Dialogue: 0,0:17:54.56,0:17:57.98,Default,,0000,0000,0000,,It’s part of the “Rest of the World”.\NYou’d think the that the laptop Dialogue: 0,0:17:57.98,0:18:02.27,Default,,0000,0000,0000,,could do 50 Hz. Plus everything\Nis global these days, right? Dialogue: 0,0:18:02.27,0:18:07.95,Default,,0000,0000,0000,,I can plug in my power pack\Nfor my laptop in the US or Australia, Dialogue: 0,0:18:07.95,0:18:11.75,Default,,0000,0000,0000,,like, it should work everywhere right! Dialogue: 0,0:18:11.75,0:18:15.20,Default,,0000,0000,0000,,No. Sad! Dialogue: 0,0:18:15.20,0:18:19.94,Default,,0000,0000,0000,,We solved it by claiming\Nthat we were American Dialogue: 0,0:18:19.94,0:18:24.77,Default,,0000,0000,0000,,and supporting 60 frames per second\Nrather than 50 frames per second. Dialogue: 0,0:18:24.77,0:18:28.40,Default,,0000,0000,0000,,So I guess a display\Nwith an American accent. Dialogue: 0,0:18:28.40,0:18:32.70,Default,,0000,0000,0000,,We deployed this hotfix\Non the Friday evening. Dialogue: 0,0:18:32.70,0:18:37.28,Default,,0000,0000,0000,,And on Saturday all the problems\Nthat we were having on Friday Dialogue: 0,0:18:37.28,0:18:41.84,Default,,0000,0000,0000,,went away. So this is kind of\Nthe power of a open source solution Dialogue: 0,0:18:41.84,0:18:45.98,Default,,0000,0000,0000,,and having complete control\Nover your hardware. Dialogue: 0,0:18:45.98,0:18:49.82,Default,,0000,0000,0000,,Nowadays we actually offer both 60 and 50 Dialogue: 0,0:18:49.82,0:18:53.60,Default,,0000,0000,0000,,because for display capture\Nif you’re displaying stuff Dialogue: 0,0:18:53.60,0:19:00.37,Default,,0000,0000,0000,,at 50 frames per second you’re\Nprobably speaking a lot faster than I am. Dialogue: 0,0:19:00.37,0:19:05.65,Default,,0000,0000,0000,,It’s really weird, these\N128 bytes are really hard Dialogue: 0,0:19:05.65,0:19:11.51,Default,,0000,0000,0000,,and the number one cause\Nof why a persons laptop Dialogue: 0,0:19:11.51,0:19:14.88,Default,,0000,0000,0000,,can’t talk to the projector. Dialogue: 0,0:19:14.88,0:19:18.24,Default,,0000,0000,0000,,It gets a trophy! Dialogue: 0,0:19:18.24,0:19:23.81,Default,,0000,0000,0000,,To try and figure out why that is\Nwe created EDID.tv. Dialogue: 0,0:19:23.81,0:19:27.09,Default,,0000,0000,0000,,It’s supposed to be\Na repository of EDID data. Dialogue: 0,0:19:27.09,0:19:30.88,Default,,0000,0000,0000,,There is a Summer of Code project,\NPython/Django/Bootstrap Dialogue: 0,0:19:30.88,0:19:34.27,Default,,0000,0000,0000,,and an EDID grabber tool that\Nyou can run on your laptop. Dialogue: 0,0:19:34.27,0:19:37.07,Default,,0000,0000,0000,,I’d love help making this work better. Dialogue: 0,0:19:37.07,0:19:41.70,Default,,0000,0000,0000,,Hasn’t had much love since\Nthe Summer of Code student made that work. Dialogue: 0,0:19:41.70,0:19:45.94,Default,,0000,0000,0000,,But it would be really nice to have an\Nopen database of everybody’s EDID data Dialogue: 0,0:19:45.94,0:19:51.25,Default,,0000,0000,0000,,out there. There are a bunch\Nof closed ones. I can pay to buy one, Dialogue: 0,0:19:51.25,0:19:55.63,Default,,0000,0000,0000,,but I’d really love to have an open one. Dialogue: 0,0:19:55.63,0:19:59.75,Default,,0000,0000,0000,,As well maybe we don’t need\Nthe whole capture solution, Dialogue: 0,0:19:59.75,0:20:02.69,Default,,0000,0000,0000,,maybe you can just override the EDID. Dialogue: 0,0:20:02.69,0:20:08.70,Default,,0000,0000,0000,,The C3VOC here actually developed\Na version that overrides EDID for VGA. Dialogue: 0,0:20:08.70,0:20:12.39,Default,,0000,0000,0000,,I have a design which works for HDMI. Dialogue: 0,0:20:12.39,0:20:20.13,Default,,0000,0000,0000,,It just uses a low cost microprocessor\Nto pretend to be an EEPROM. Dialogue: 0,0:20:20.13,0:20:22.89,Default,,0000,0000,0000,,As well, DisplayPort is not HDMI.\NDon’t get these two confused, Dialogue: 0,0:20:22.89,0:20:25.65,Default,,0000,0000,0000,,they are very, very different protocols. Dialogue: 0,0:20:25.65,0:20:29.65,Default,,0000,0000,0000,,They have an Auxiliary Channel\Nlike EDID and CEC. Dialogue: 0,0:20:29.65,0:20:34.09,Default,,0000,0000,0000,,I have boards to decode them\Nhere at CCC. Dialogue: 0,0:20:34.09,0:20:37.14,Default,,0000,0000,0000,,So if you’re interested in that\Ncome and talk to me Dialogue: 0,0:20:37.14,0:20:43.01,Default,,0000,0000,0000,,because we would really like to do\Nsimilar things for DisplayPort. Dialogue: 0,0:20:43.01,0:20:46.70,Default,,0000,0000,0000,,That is the slow speed data. Dialogue: 0,0:20:46.70,0:20:49.93,Default,,0000,0000,0000,,{\i1}Sip from bottle{\i0} Dialogue: 0,0:20:49.93,0:20:53.10,Default,,0000,0000,0000,,What about the high speed data? Dialogue: 0,0:20:53.10,0:20:57.50,Default,,0000,0000,0000,,Each pixel on your screen is Dialogue: 0,0:20:57.50,0:21:04.27,Default,,0000,0000,0000,,basically three colors\Nin DVI standard: Red, Green, Blue. Dialogue: 0,0:21:04.27,0:21:07.53,Default,,0000,0000,0000,,And each one is a byte in size. Dialogue: 0,0:21:07.53,0:21:15.54,Default,,0000,0000,0000,,Each of the colors is mapped to\Na channel on the HDMI connector. Dialogue: 0,0:21:15.54,0:21:20.43,Default,,0000,0000,0000,,You can kind of see the Red and\Nthe Green and the Blue channels. Dialogue: 0,0:21:20.43,0:21:23.13,Default,,0000,0000,0000,,Each channel is differential pair. Dialogue: 0,0:21:23.13,0:21:27.42,Default,,0000,0000,0000,,You get a Plus and a Negative\Nand a Shield. Dialogue: 0,0:21:27.42,0:21:35.46,Default,,0000,0000,0000,,And they use twisted pair to try\Nand reduce the noise reception of these, Dialogue: 0,0:21:35.46,0:21:38.76,Default,,0000,0000,0000,,because these are quite high speed. Dialogue: 0,0:21:38.76,0:21:41.86,Default,,0000,0000,0000,,And they have a dedicated Shield to\Ntry and – again – reduce the noise Dialogue: 0,0:21:41.86,0:21:47.09,Default,,0000,0000,0000,,that is captured. Dialogue: 0,0:21:47.09,0:21:53.14,Default,,0000,0000,0000,,This is kind of where it gets to\Nthe ‘differential signaling’ part Dialogue: 0,0:21:53.14,0:21:57.99,Default,,0000,0000,0000,,of the ‘TMDS’ that is\Nthe kind of code name Dialogue: 0,0:21:57.99,0:22:05.22,Default,,0000,0000,0000,,for the internal protocol that is used\Non the high speed data. Dialogue: 0,0:22:05.22,0:22:10.16,Default,,0000,0000,0000,,They also…\Nall these channels share a Clock. Dialogue: 0,0:22:10.16,0:22:13.83,Default,,0000,0000,0000,,That clock is called the Pixel Clock. Dialogue: 0,0:22:13.83,0:22:17.17,Default,,0000,0000,0000,,But each of these channels\Nis a serial channel. Dialogue: 0,0:22:17.17,0:22:22.93,Default,,0000,0000,0000,,It transmits data at 10 bits. Dialogue: 0,0:22:22.93,0:22:25.66,Default,,0000,0000,0000,,They… every 10 bits – sorry, Dialogue: 0,0:22:25.66,0:22:31.62,Default,,0000,0000,0000,,every clock cycle there are 10 bits of data\Ntransmitted on each of these channels. Dialogue: 0,0:22:31.62,0:22:34.95,Default,,0000,0000,0000,,There is a shared clock and\Neach of the channels is running Dialogue: 0,0:22:34.95,0:22:39.34,Default,,0000,0000,0000,,at effectively\Nten times that shared clock. Dialogue: 0,0:22:39.34,0:22:41.97,Default,,0000,0000,0000,,This is kind of what\Nthe whole system looks like. Dialogue: 0,0:22:41.97,0:22:45.44,Default,,0000,0000,0000,,You have your Red, Green, Blue channels. Dialogue: 0,0:22:45.44,0:22:49.29,Default,,0000,0000,0000,,You take your 8 bits of input data\Non each channel Dialogue: 0,0:22:49.29,0:22:53.85,Default,,0000,0000,0000,,and you convert it to the 10 bits Dialogue: 0,0:22:53.85,0:22:56.71,Default,,0000,0000,0000,,that we’re going to transmit,\Nand it goes across the cable Dialogue: 0,0:22:56.71,0:23:01.17,Default,,0000,0000,0000,,and then we decode it on the other side. Dialogue: 0,0:23:01.17,0:23:07.31,Default,,0000,0000,0000,,The question is: what does\Nthe 8 bit to 10 bit encoding Dialogue: 0,0:23:07.31,0:23:11.98,Default,,0000,0000,0000,,look like and how do you understand that. Dialogue: 0,0:23:11.98,0:23:17.15,Default,,0000,0000,0000,,It is described by this diagram here.\NIt’s a bit small so I’ll bring it up. Dialogue: 0,0:23:17.15,0:23:22.75,Default,,0000,0000,0000,,This is what it looks like.\NYes… sure… Dialogue: 0,0:23:22.75,0:23:27.73,Default,,0000,0000,0000,,…what? This diagram – like – Dialogue: 0,0:23:27.73,0:23:32.38,Default,,0000,0000,0000,,I’ve spent hours looking at this,\Nand it is an extremely hard diagram Dialogue: 0,0:23:32.38,0:23:38.58,Default,,0000,0000,0000,,to decode.\NIt’s very, very hard to understand. Dialogue: 0,0:23:38.58,0:23:42.75,Default,,0000,0000,0000,,And it turns out the encoding\Nprotocol is actually quite easy! Dialogue: 0,0:23:42.75,0:23:47.90,Default,,0000,0000,0000,,It’s three easy steps – approximately. Dialogue: 0,0:23:47.90,0:23:52.06,Default,,0000,0000,0000,,So I’m going to show you all how\Nto write an encoder or a decoder. Dialogue: 0,0:23:52.06,0:23:55.28,Default,,0000,0000,0000,,That diagram is just for the encoder. Dialogue: 0,0:23:55.28,0:24:00.73,Default,,0000,0000,0000,,They have a similar diagram that\Nis not the inverse of this for decoding. Dialogue: 0,0:24:00.73,0:24:03.98,Default,,0000,0000,0000,,Again, almost impossible to read. Dialogue: 0,0:24:03.98,0:24:07.44,Default,,0000,0000,0000,,The three steps: First we’re\Ngoing to do ‘Control’ or ‘Pixel’, Dialogue: 0,0:24:07.44,0:24:11.26,Default,,0000,0000,0000,,choose which one to do. Then we’re\Ngoing to either encode Control data Dialogue: 0,0:24:11.26,0:24:15.97,Default,,0000,0000,0000,,or encode Pixel data. Dialogue: 0,0:24:15.97,0:24:21.18,Default,,0000,0000,0000,,A couple of important points\Nto go through first: Dialogue: 0,0:24:21.18,0:24:24.48,Default,,0000,0000,0000,,The Input data\N– no matter how wide it is – Dialogue: 0,0:24:24.48,0:24:29.12,Default,,0000,0000,0000,,is converted to 10 bit symbols. Dialogue: 0,0:24:29.12,0:24:32.06,Default,,0000,0000,0000,,Data goes to symbols.\NWhen we’re talking about them Dialogue: 0,0:24:32.06,0:24:36.76,Default,,0000,0000,0000,,being transmitted we talk about them\Nin symbols, when it’s decoded into pixels Dialogue: 0,0:24:36.76,0:24:40.13,Default,,0000,0000,0000,,we talk about them in data. Dialogue: 0,0:24:40.13,0:24:45.76,Default,,0000,0000,0000,,As well, things need\Nto be kept DC-balanced. Dialogue: 0,0:24:45.76,0:24:48.48,Default,,0000,0000,0000,,I’ve rushed ahead. Dialogue: 0,0:24:48.48,0:24:52.85,Default,,0000,0000,0000,,The question is: “Why 10 bits?”\NOur pixels were 8 bits. Dialogue: 0,0:24:52.85,0:24:56.07,Default,,0000,0000,0000,,I will explain why\Nin the Pixel Data section. Dialogue: 0,0:24:56.07,0:24:59.06,Default,,0000,0000,0000,,But it’s important that all our symbols\Nare the same size. Dialogue: 0,0:24:59.06,0:25:05.16,Default,,0000,0000,0000,,We’re always transmitting 10 bits\Nevery clock cycle. Dialogue: 0,0:25:05.16,0:25:08.53,Default,,0000,0000,0000,,Keeping DC-balanced: Dialogue: 0,0:25:08.53,0:25:12.88,Default,,0000,0000,0000,,long runs of 1s and 0s are bad. Dialogue: 0,0:25:12.88,0:25:15.91,Default,,0000,0000,0000,,There are lots of reasons for this. Dialogue: 0,0:25:15.91,0:25:21.81,Default,,0000,0000,0000,,I tend to think of it like\NHDMI isn’t AC coupled Dialogue: 0,0:25:21.81,0:25:27.28,Default,,0000,0000,0000,,but you can kind of think of it\Nlike AC coupled. Dialogue: 0,0:25:27.28,0:25:30.39,Default,,0000,0000,0000,,It’s not to recover Clock. Dialogue: 0,0:25:30.39,0:25:35.42,Default,,0000,0000,0000,,We have a clock pair that is used\Nto give our Clock signal. Dialogue: 0,0:25:35.42,0:25:38.06,Default,,0000,0000,0000,,There are lots of lies on internet\Nthat say that the reason Dialogue: 0,0:25:38.06,0:25:42.65,Default,,0000,0000,0000,,we’re going to keep DC balance\Nis because of Clock. Dialogue: 0,0:25:42.65,0:25:47.55,Default,,0000,0000,0000,,But no, that’s not the case. Dialogue: 0,0:25:47.55,0:25:52.32,Default,,0000,0000,0000,,So what does DC balance mean? Dialogue: 0,0:25:52.32,0:25:57.11,Default,,0000,0000,0000,,A symbol which has lots of 1s\Nor lots of 0s Dialogue: 0,0:25:57.11,0:26:00.87,Default,,0000,0000,0000,,is going to be considered DC-biased Dialogue: 0,0:26:00.87,0:26:05.27,Default,,0000,0000,0000,,if it has more 1s than 0s. Dialogue: 0,0:26:05.27,0:26:08.77,Default,,0000,0000,0000,,This is kind of what it’s like:\Nthis symbol here Dialogue: 0,0:26:08.77,0:26:12.53,Default,,0000,0000,0000,,has lots of 1s and if you add up\Nall the 1s you can see it’s got Dialogue: 0,0:26:12.53,0:26:16.92,Default,,0000,0000,0000,,quite a positive bias.\NIf it was inverse and had lots of 0s Dialogue: 0,0:26:16.92,0:26:19.51,Default,,0000,0000,0000,,it would have a negative DC bias. Dialogue: 0,0:26:19.51,0:26:26.61,Default,,0000,0000,0000,,That cause… that DC bias over time\Ncauses us problems. Dialogue: 0,0:26:26.61,0:26:32.38,Default,,0000,0000,0000,,That are the two important things we have\Nto keep in mind when looking at the rest. Dialogue: 0,0:26:32.38,0:26:34.43,Default,,0000,0000,0000,,{\i1}sound of bottle sip{\i0} Dialogue: 0,0:26:34.43,0:26:37.71,Default,,0000,0000,0000,,The first thing we need to figure out is\Nare we transmitting Control data Dialogue: 0,0:26:37.71,0:26:39.94,Default,,0000,0000,0000,,or Pixel data. Dialogue: 0,0:26:39.94,0:26:44.01,Default,,0000,0000,0000,,Turns out that what is happening\Nin your display is, Dialogue: 0,0:26:44.01,0:26:47.09,Default,,0000,0000,0000,,we are transmitting something\Nthat’s actually bigger Dialogue: 0,0:26:47.09,0:26:50.91,Default,,0000,0000,0000,,than what you\Nsee on your screen. Dialogue: 0,0:26:50.91,0:26:57.37,Default,,0000,0000,0000,,This not the scale. The Control data\Nperiods are much, much smaller. Dialogue: 0,0:26:57.37,0:27:06.23,Default,,0000,0000,0000,,The Control data is in orange\Nand the Pixel data is in purple-pink. Dialogue: 0,0:27:06.23,0:27:12.26,Default,,0000,0000,0000,,So why does this exist?\NIt exists because of old CRT monitors. Dialogue: 0,0:27:12.26,0:27:16.62,Default,,0000,0000,0000,,And for those in the audience\Nwho where kind of born after CRT monitors, Dialogue: 0,0:27:16.62,0:27:19.72,Default,,0000,0000,0000,,this is what they look like. Dialogue: 0,0:27:19.72,0:27:23.35,Default,,0000,0000,0000,,The way they work is,\Nthey have an electron beam Dialogue: 0,0:27:23.35,0:27:27.92,Default,,0000,0000,0000,,that scans across,\Nhighlighting the phosphorus. Dialogue: 0,0:27:27.92,0:27:34.62,Default,,0000,0000,0000,,This electron beam can’t just be…\Nget back to other side of the screen Dialogue: 0,0:27:34.62,0:27:39.05,Default,,0000,0000,0000,,straight away, or get back to the top of\Nthe screen. And so these periods Dialogue: 0,0:27:39.05,0:27:43.64,Default,,0000,0000,0000,,where we are transmitting Control data\Nwas to allow the electron beam Dialogue: 0,0:27:43.64,0:27:47.47,Default,,0000,0000,0000,,to get back to the location\Nwhere it needed to start Dialogue: 0,0:27:47.47,0:27:53.16,Default,,0000,0000,0000,,transmitting the next set of data. Dialogue: 0,0:27:53.16,0:27:56.08,Default,,0000,0000,0000,,That’s why it exists.\NWhy do we care? Dialogue: 0,0:27:56.08,0:27:59.09,Default,,0000,0000,0000,,Because the encoding schemes\Nfor Control and Pixel data Dialogue: 0,0:27:59.09,0:28:03.82,Default,,0000,0000,0000,,are actually quite different. Dialogue: 0,0:28:03.82,0:28:07.15,Default,,0000,0000,0000,,This is the main difference.\NI’m going to come back to this slide Dialogue: 0,0:28:07.15,0:28:11.51,Default,,0000,0000,0000,,a bit later. But again, the\Nimportant thing to see here is Dialogue: 0,0:28:11.51,0:28:15.30,Default,,0000,0000,0000,,that despite the encoding scheme\Nbeing quite different Dialogue: 0,0:28:15.30,0:28:21.63,Default,,0000,0000,0000,,the output is 10 bits in size. Dialogue: 0,0:28:21.63,0:28:25.39,Default,,0000,0000,0000,,That first step – choosing whether\Nit’s Pixel or Control data – Dialogue: 0,0:28:25.39,0:28:30.11,Default,,0000,0000,0000,,is described by this bit of the diagram.\NYou might notice that’s Dialogue: 0,0:28:30.11,0:28:34.31,Default,,0000,0000,0000,,not the first thing in the diagram. Dialogue: 0,0:28:34.31,0:28:37.90,Default,,0000,0000,0000,,How do you convert Control data\Nto Control symbols? Dialogue: 0,0:28:37.90,0:28:41.42,Default,,0000,0000,0000,,First we need to know what\NControl data is. There are two bits, Dialogue: 0,0:28:41.42,0:28:44.50,Default,,0000,0000,0000,,there is the HSync and the VSync signal. Dialogue: 0,0:28:44.50,0:28:51.27,Default,,0000,0000,0000,,They provide basically\Nthe horizontal and vertical pixel sizes. Dialogue: 0,0:28:51.27,0:28:55.46,Default,,0000,0000,0000,,They are kind of left over from VGA.\NWe don’t actually need them Dialogue: 0,0:28:55.46,0:29:01.10,Default,,0000,0000,0000,,in HDMI or DVI to know\Nwhere the edges are Dialogue: 0,0:29:01.10,0:29:06.71,Default,,0000,0000,0000,,because we can tell the difference\Nbetween Control and Pixel data. Dialogue: 0,0:29:06.71,0:29:11.89,Default,,0000,0000,0000,,But they kind of still exist\Nbecause of backwards compatibility. Dialogue: 0,0:29:11.89,0:29:15.86,Default,,0000,0000,0000,,This means that we have two bits of data\Nthat we need to convert to 10 bits of data. Dialogue: 0,0:29:15.86,0:29:22.41,Default,,0000,0000,0000,,So, a 2b/10b scheme. Dialogue: 0,0:29:22.41,0:29:27.27,Default,,0000,0000,0000,,How they do it is they just hand-picked\Nfour symbols that were going to be Dialogue: 0,0:29:27.27,0:29:30.38,Default,,0000,0000,0000,,these Control data symbols. Dialogue: 0,0:29:30.38,0:29:35.02,Default,,0000,0000,0000,,These are the four symbols. There’s\Nsome interesting properties with them. Dialogue: 0,0:29:35.02,0:29:38.72,Default,,0000,0000,0000,,They are chosen to be DC-balanced.\NThey roughly have the same number Dialogue: 0,0:29:38.72,0:29:46.87,Default,,0000,0000,0000,,of 0s and 1s. So we don’t have to worry about\Nthe DC bias with these symbols very much. Dialogue: 0,0:29:46.87,0:29:51.74,Default,,0000,0000,0000,,They are also chosen to have\Nseven or more transitions from 0 to 1 Dialogue: 0,0:29:51.74,0:29:58.61,Default,,0000,0000,0000,,in them. This number of transitions Dialogue: 0,0:29:58.61,0:30:03.23,Default,,0000,0000,0000,,is used to understand\Nthe phase relationship Dialogue: 0,0:30:03.23,0:30:07.02,Default,,0000,0000,0000,,of the different channels.\NSo if you remember this diagram, Dialogue: 0,0:30:07.02,0:30:12.95,Default,,0000,0000,0000,,we have a cable going between\Nthe transmitter and the transceiver. Dialogue: 0,0:30:12.95,0:30:16.36,Default,,0000,0000,0000,,These are, again, very high speed signals. Dialogue: 0,0:30:16.36,0:30:22.13,Default,,0000,0000,0000,,And even if the transmitter was\Ntransmitting everything at the same time, Dialogue: 0,0:30:22.13,0:30:28.24,Default,,0000,0000,0000,,the cable isn’t ideal and might\Ndelay some of the symbols. Dialogue: 0,0:30:28.24,0:30:32.88,Default,,0000,0000,0000,,The bits on one channel\N[might take] longer than others. Dialogue: 0,0:30:32.88,0:30:37.32,Default,,0000,0000,0000,,By having lots of these transmissions\Nwe can actually find Dialogue: 0,0:30:37.32,0:30:41.59,Default,,0000,0000,0000,,the phase relationship between\Neach of the channels and then Dialogue: 0,0:30:41.59,0:30:47.56,Default,,0000,0000,0000,,recover the data. And so\Nthat’s why these Control symbols Dialogue: 0,0:30:47.56,0:30:52.40,Default,,0000,0000,0000,,have a large number\Nof transitions in them. Dialogue: 0,0:30:52.40,0:30:56.75,Default,,0000,0000,0000,,More on that later when we get to the\Nimplementation. And I’m running out’ time. Dialogue: 0,0:30:56.75,0:31:01.16,Default,,0000,0000,0000,,This part of the diagram is the\NControl data encoding. Dialogue: 0,0:31:01.16,0:31:04.19,Default,,0000,0000,0000,,{\i1}sip from bottle{\i0} Dialogue: 0,0:31:04.19,0:31:06.99,Default,,0000,0000,0000,,What about Pixel data\Nand the Pixel symbols? Dialogue: 0,0:31:06.99,0:31:13.74,Default,,0000,0000,0000,,Again, in DVI each channel\Nof the Pixel is 8 bits. Dialogue: 0,0:31:13.74,0:31:17.20,Default,,0000,0000,0000,,And the encoding scheme is described\Nby the rest of the diagram. Dialogue: 0,0:31:17.20,0:31:22.48,Default,,0000,0000,0000,,But again, it’s actually\Nreally, really simple. Dialogue: 0,0:31:22.48,0:31:26.52,Default,,0000,0000,0000,,This encoding scheme is called 8b/10b, Dialogue: 0,0:31:26.52,0:31:30.03,Default,,0000,0000,0000,,because it takes 8 bits\Nconverting it to 10 bits. Dialogue: 0,0:31:30.03,0:31:33.88,Default,,0000,0000,0000,,However, there is a huge danger\Nhere because IBM also invented Dialogue: 0,0:31:33.88,0:31:37.48,Default,,0000,0000,0000,,the 8b/10b scheme\Nthat is used in everything. Dialogue: 0,0:31:37.48,0:31:41.08,Default,,0000,0000,0000,,This is used in DisplayPort, it’s used\Nin PCI Express, it’s used in SATA, Dialogue: 0,0:31:41.08,0:31:43.93,Default,,0000,0000,0000,,it’s used in pretty much everything\Non the planet. Dialogue: 0,0:31:43.93,0:31:48.26,Default,,0000,0000,0000,,This is not the encoding TDMS uses. Dialogue: 0,0:31:48.26,0:31:52.49,Default,,0000,0000,0000,,You can lose a lot of time\Ntrying to map this diagram Dialogue: 0,0:31:52.49,0:31:56.56,Default,,0000,0000,0000,,to the IBM coding scheme,\Nand going these are not the same. Dialogue: 0,0:31:56.56,0:32:03.49,Default,,0000,0000,0000,,That is because they’re not the same.\NThis is a totally different coding scheme. Dialogue: 0,0:32:03.49,0:32:07.57,Default,,0000,0000,0000,,Encoding Pixel data is a two-step process.\NI did say it was three-ish steps Dialogue: 0,0:32:07.57,0:32:12.27,Default,,0000,0000,0000,,to do this.\NThe first step is we want to reduce Dialogue: 0,0:32:12.27,0:32:18.11,Default,,0000,0000,0000,,the transitions in the data. Dialogue: 0,0:32:18.11,0:32:20.43,Default,,0000,0000,0000,,How do we do this? –\NSorry, why do we do this? Dialogue: 0,0:32:20.43,0:32:23.57,Default,,0000,0000,0000,,Because this, again, is\Na high speed channel. Dialogue: 0,0:32:23.57,0:32:27.53,Default,,0000,0000,0000,,We want to reduce the cross-talk\Nbetween the lanes. Dialogue: 0,0:32:27.53,0:32:30.67,Default,,0000,0000,0000,,They are actually quite close\Nto each other. Dialogue: 0,0:32:30.67,0:32:34.78,Default,,0000,0000,0000,,So by reducing the number\Nof transitions we can reduce Dialogue: 0,0:32:34.78,0:32:40.13,Default,,0000,0000,0000,,the probability that the signal propagates Dialogue: 0,0:32:40.13,0:32:45.76,Default,,0000,0000,0000,,from one channel to the next.\NAnd how we do it? Dialogue: 0,0:32:45.76,0:32:49.79,Default,,0000,0000,0000,,We’re gonna choose one\Nof two encoding schemes. Dialogue: 0,0:32:49.79,0:32:54.00,Default,,0000,0000,0000,,An XOR encoding scheme\Nor an XNOR encoding scheme. Dialogue: 0,0:32:54.00,0:32:57.74,Default,,0000,0000,0000,,How do we do the XOR encoding scheme?\NIt’s actually pretty simple. Dialogue: 0,0:32:57.74,0:33:00.68,Default,,0000,0000,0000,,We set the Encoded Bit\Nsame as the first Data Bit Dialogue: 0,0:33:00.68,0:33:04.31,Default,,0000,0000,0000,,and then the next Encoded Bit\Nis the first Encoded Bit Dialogue: 0,0:33:04.31,0:33:09.65,Default,,0000,0000,0000,,XORed with the Data bit. Dialogue: 0,0:33:09.65,0:33:14.00,Default,,0000,0000,0000,,And then we just repeat until\Nwe’ve done the 8 bits. Dialogue: 0,0:33:14.00,0:33:16.16,Default,,0000,0000,0000,,So this is how we do the XOR encoding. Dialogue: 0,0:33:16.16,0:33:20.15,Default,,0000,0000,0000,,The XNOR encoding is the same process,\Nexcept instead of using XOR Dialogue: 0,0:33:20.15,0:33:24.50,Default,,0000,0000,0000,,it uses XNOR. Dialogue: 0,0:33:24.50,0:33:29.21,Default,,0000,0000,0000,,How do we choose\Nwhich one of these to use? Dialogue: 0,0:33:29.21,0:33:35.02,Default,,0000,0000,0000,,If the Input Data byte\Nhas fewer than four 1s Dialogue: 0,0:33:35.02,0:33:39.92,Default,,0000,0000,0000,,we use the XOR. If it has more\Nthan four 1s we use the XNOR. Dialogue: 0,0:33:39.92,0:33:43.06,Default,,0000,0000,0000,,And then there’s a tie-break (?)\Nif you have even. Dialogue: 0,0:33:43.06,0:33:47.85,Default,,0000,0000,0000,,The important thing here is that this\Nmethod is determined by the Data byte only. Dialogue: 0,0:33:47.85,0:33:53.00,Default,,0000,0000,0000,,There is no hidden state here\Nor continuous change. Dialogue: 0,0:33:53.00,0:33:59.71,Default,,0000,0000,0000,,Every pixel has a one-to-one\Nmapping to an encoding. Dialogue: 0,0:33:59.71,0:34:04.26,Default,,0000,0000,0000,,Then we append a bit\Non the end that indicates Dialogue: 0,0:34:04.26,0:34:09.03,Default,,0000,0000,0000,,whether we chose XOR,\NXNOR encoding of that data. Dialogue: 0,0:34:09.03,0:34:15.22,Default,,0000,0000,0000,,And so that converts\Nour 8 bits Input Pixels Dialogue: 0,0:34:15.22,0:34:21.50,Default,,0000,0000,0000,,to 9 bits of encoded data, effectively\Nour 8-bit encoded sequence Dialogue: 0,0:34:21.50,0:34:27.72,Default,,0000,0000,0000,,and then one bit to indicate whether\Nwe chose XOR, or XNOR encoding Dialogue: 0,0:34:27.72,0:34:34.24,Default,,0000,0000,0000,,for that Data bit. So that’s it there. Dialogue: 0,0:34:34.24,0:34:38.06,Default,,0000,0000,0000,,This encoding is actually very good\Nat reducing transitions. Dialogue: 0,0:34:38.06,0:34:43.52,Default,,0000,0000,0000,,On average, we had roughly\Neight transitions previously, Dialogue: 0,0:34:43.52,0:34:48.90,Default,,0000,0000,0000,,now we have roughly three-ish,\Nso it’s pretty cool. Dialogue: 0,0:34:48.90,0:34:51.22,Default,,0000,0000,0000,,I have no idea how they figured this out. Dialogue: 0,0:34:51.22,0:34:55.57,Default,,0000,0000,0000,,I’m assuming some very smart\Nmathematicians where involved Dialogue: 0,0:34:55.57,0:35:00.33,Default,,0000,0000,0000,,because discovering this is beyond me. Dialogue: 0,0:35:00.33,0:35:02.28,Default,,0000,0000,0000,,And that describes the top part\Nof this process. Dialogue: 0,0:35:02.28,0:35:04.41,Default,,0000,0000,0000,,{\i1}sounds of scratching nose and beard{\i0} Dialogue: 0,0:35:04.41,0:35:11.66,Default,,0000,0000,0000,,This is where, in the TMDS, the\NTransition Minimization comes from, Dialogue: 0,0:35:11.66,0:35:14.22,Default,,0000,0000,0000,,that step there in the encoding process. Dialogue: 0,0:35:14.22,0:35:16.31,Default,,0000,0000,0000,,But there is still one more step. Dialogue: 0,0:35:16.31,0:35:22.37,Default,,0000,0000,0000,,We need to keep the channel\NDC-balanced, as I explained earlier. Dialogue: 0,0:35:22.37,0:35:27.86,Default,,0000,0000,0000,,How can we do that? Because\Nnot all pixels are guaranteed to be Dialogue: 0,0:35:27.86,0:35:32.16,Default,,0000,0000,0000,,at zero DC bias\Nlike the Control symbols are. Dialogue: 0,0:35:32.16,0:35:37.32,Default,,0000,0000,0000,,We do it by keeping a running count\Nof the DC bias we have, Dialogue: 0,0:35:37.32,0:35:41.50,Default,,0000,0000,0000,,and then, if we have a positive DC bias Dialogue: 0,0:35:41.50,0:35:45.89,Default,,0000,0000,0000,,and the symbol is also\Npositively biased, we invert it. Dialogue: 0,0:35:45.89,0:35:51.77,Default,,0000,0000,0000,,Or, if we have a negative DC bias\Nand the symbol has a negative DC bias, Dialogue: 0,0:35:51.77,0:35:55.91,Default,,0000,0000,0000,,we invert it.\NAnd the reason we do this is Dialogue: 0,0:35:55.91,0:36:00.83,Default,,0000,0000,0000,,because when we invert a symbol we\Nconvert all the 1s to 0s which means Dialogue: 0,0:36:00.83,0:36:05.79,Default,,0000,0000,0000,,a negative DC bias\Nbecomes a positive DC bias. Dialogue: 0,0:36:05.79,0:36:10.80,Default,,0000,0000,0000,,As I said, we chose – because we are already\Nnegative and the thing was negative – Dialogue: 0,0:36:10.80,0:36:17.94,Default,,0000,0000,0000,,we convert it to plus. It means we’re\Ngoing to drive the running DC bias value Dialogue: 0,0:36:17.94,0:36:22.62,Default,,0000,0000,0000,,back towards zero.\NWe might overshoot, but the next stage Dialogue: 0,0:36:22.62,0:36:27.10,Default,,0000,0000,0000,,we’ll keep trying to oscillate up and\Ndown, and on average over time Dialogue: 0,0:36:27.10,0:36:31.38,Default,,0000,0000,0000,,we keep a DC bias of zero. Dialogue: 0,0:36:31.38,0:36:36.87,Default,,0000,0000,0000,,And as I said. Then, to indicate\Nwhether or not we inverted Dialogue: 0,0:36:36.87,0:36:42.74,Default,,0000,0000,0000,,or kept… the…\Nstraight through we inverted, Dialogue: 0,0:36:42.74,0:36:48.08,Default,,0000,0000,0000,,we add another bit on the end.\NSo that’s how get our 10 bit Dialogue: 0,0:36:48.08,0:36:53.78,Default,,0000,0000,0000,,encoding scheme.\NWe have the 8 bits of encoded data, Dialogue: 0,0:36:53.78,0:36:58.80,Default,,0000,0000,0000,,then one bit indicating whether or not\Nit used XOR/XNOR encoding, Dialogue: 0,0:36:58.80,0:37:04.03,Default,,0000,0000,0000,,and then one bit to indicate whether\Nor not we inverted the symbol. Dialogue: 0,0:37:04.03,0:37:09.97,Default,,0000,0000,0000,,That describes this bottom part\Nof the chart. Dialogue: 0,0:37:09.97,0:37:14.51,Default,,0000,0000,0000,,Now you can see partly\Nwhy this chart is kind of confusing. Dialogue: 0,0:37:14.51,0:37:18.84,Default,,0000,0000,0000,,It’s no way in what I think\Nof a what’s a logical diagram. Dialogue: 0,0:37:18.84,0:37:21.61,Default,,0000,0000,0000,,This might be how you implement it\Nin hardware if you really understand Dialogue: 0,0:37:21.61,0:37:28.99,Default,,0000,0000,0000,,the protocol, but not a very good diagram\Nfor explaining what’s going on. And… Dialogue: 0,0:37:28.99,0:37:31.59,Default,,0000,0000,0000,,{\i1}sip from bottle{\i0} Dialogue: 0,0:37:31.59,0:37:34.19,Default,,0000,0000,0000,,As you see it’s actually pretty simple. Dialogue: 0,0:37:34.19,0:37:40.36,Default,,0000,0000,0000,,In summary this is\Nthe interesting information Dialogue: 0,0:37:40.36,0:37:45.39,Default,,0000,0000,0000,,about the two different encoding schemes. Dialogue: 0,0:37:45.39,0:37:49.35,Default,,0000,0000,0000,,Because we minimized\Nthe transitions in the Pixel data Dialogue: 0,0:37:49.35,0:37:53.02,Default,,0000,0000,0000,,we can actually tell\NControl and Pixel data apart Dialogue: 0,0:37:53.02,0:37:56.36,Default,,0000,0000,0000,,by looking at how many transitions\Nare in the symbol. Dialogue: 0,0:37:56.36,0:38:00.84,Default,,0000,0000,0000,,If it has six or more transitions\Nit must be a Control symbol. Dialogue: 0,0:38:00.84,0:38:06.04,Default,,0000,0000,0000,,If it has four or less\Nit must be a Pixel symbol. Dialogue: 0,0:38:06.04,0:38:09.61,Default,,0000,0000,0000,,You now know\Nhow to encode TDMS data Dialogue: 0,0:38:09.61,0:38:12.29,Default,,0000,0000,0000,,and how to decode TDMS data Dialogue: 0,0:38:12.29,0:38:18.07,Default,,0000,0000,0000,,because if you want to decode\Nyou just do the process backwards. Dialogue: 0,0:38:18.07,0:38:25.48,Default,,0000,0000,0000,,Congratulations!\NHow do you actually implement this? Dialogue: 0,0:38:25.48,0:38:28.29,Default,,0000,0000,0000,,You can just write the XOR logic Dialogue: 0,0:38:28.29,0:38:31.25,Default,,0000,0000,0000,,and a little counter\Nthat keeps track of the DC bias Dialogue: 0,0:38:31.25,0:38:34.78,Default,,0000,0000,0000,,and all that type of thing\Nin FPGA. Dialogue: 0,0:38:34.78,0:38:38.69,Default,,0000,0000,0000,,I’m not going to describe that\Nbecause I don’t have much time. Dialogue: 0,0:38:38.69,0:38:43.13,Default,,0000,0000,0000,,But if you followed the process\Nthat I have given you Dialogue: 0,0:38:43.13,0:38:45.98,Default,,0000,0000,0000,,it should be pretty easy. Dialogue: 0,0:38:45.98,0:38:50.99,Default,,0000,0000,0000,,But… and this is what we use currently. Dialogue: 0,0:38:50.99,0:38:53.70,Default,,0000,0000,0000,,You could actually use a lookup table.\NWhat we are doing is Dialogue: 0,0:38:53.70,0:38:58.38,Default,,0000,0000,0000,,converting 8 bits of data\Nto 10 bits of data. Dialogue: 0,0:38:58.38,0:39:03.76,Default,,0000,0000,0000,,That is a lookup table process,\Npretty easy. Dialogue: 0,0:39:03.76,0:39:08.90,Default,,0000,0000,0000,,FPGAs are really good at\Ndoing ‘lookup table’-type processes, Dialogue: 0,0:39:08.90,0:39:13.01,Default,,0000,0000,0000,,and it also allows you then\Nto extend this system Dialogue: 0,0:39:13.01,0:39:18.15,Default,,0000,0000,0000,,to those other protocols\Nlike the 4b/10b that is used Dialogue: 0,0:39:18.15,0:39:20.89,Default,,0000,0000,0000,,for the Auxiliary data. Dialogue: 0,0:39:20.89,0:39:24.77,Default,,0000,0000,0000,,So we are looking at that in the future.\NIt uses a few more resources Dialogue: 0,0:39:24.77,0:39:28.02,Default,,0000,0000,0000,,but it’s a lot more powerful. Dialogue: 0,0:39:28.02,0:39:32.79,Default,,0000,0000,0000,,This is kind of what your encoder\Nwill look like, and your decoder. Dialogue: 0,0:39:32.79,0:39:36.65,Default,,0000,0000,0000,,It’s quite simple,\Nit takes in your 10 bits of data Dialogue: 0,0:39:36.65,0:39:39.40,Default,,0000,0000,0000,,and outputs either\Nyour 8 bits of Pixel data Dialogue: 0,0:39:39.40,0:39:43.70,Default,,0000,0000,0000,,or your 2 bits of Control data\Nand the data type. Dialogue: 0,0:39:43.70,0:39:47.19,Default,,0000,0000,0000,,This is kind of what if you went\Ninto our design and looked at it Dialogue: 0,0:39:47.19,0:39:49.57,Default,,0000,0000,0000,,at high level, in the schematic, Dialogue: 0,0:39:49.57,0:39:52.22,Default,,0000,0000,0000,,you’d probably see a block\Nthat looks like this. Dialogue: 0,0:39:52.22,0:39:56.43,Default,,0000,0000,0000,,The encoder is slightly more complicated\Nbecause you also have the DC bias count Dialogue: 0,0:39:56.43,0:40:00.99,Default,,0000,0000,0000,,that you have to keep track of.\NBut, again, Dialogue: 0,0:40:00.99,0:40:03.72,Default,,0000,0000,0000,,the data goes in\Nand the data comes out. Dialogue: 0,0:40:03.72,0:40:08.81,Default,,0000,0000,0000,,That’s simple, right? Dialogue: 0,0:40:08.81,0:40:12.26,Default,,0000,0000,0000,,This kind of extends to Auxiliary data,\Nor if you get an error, Dialogue: 0,0:40:12.26,0:40:15.49,Default,,0000,0000,0000,,like if you…\NThere are 124 symbols Dialogue: 0,0:40:15.49,0:40:18.93,Default,,0000,0000,0000,,that you can have in 10 bits of data. Dialogue: 0,0:40:18.93,0:40:22.16,Default,,0000,0000,0000,,Not all of them are valid.\NSo if you get one of these invalid symbols Dialogue: 0,0:40:22.16,0:40:25.77,Default,,0000,0000,0000,,you know you have an error. Dialogue: 0,0:40:25.77,0:40:30.27,Default,,0000,0000,0000,,However, things happen quite quickly Dialogue: 0,0:40:30.27,0:40:34.52,Default,,0000,0000,0000,,when you times them by ten.\NAnd so our Pixel Clock Dialogue: 0,0:40:34.52,0:40:39.15,Default,,0000,0000,0000,,for 640x480 is 25 MHz.\NWhen you times that by ten Dialogue: 0,0:40:39.15,0:40:45.00,Default,,0000,0000,0000,,you get 250 MBits per channel.\NWhen you’re doing 720p Dialogue: 0,0:40:45.00,0:40:48.58,Default,,0000,0000,0000,,you’re doing 750 MBits per channel. Dialogue: 0,0:40:48.58,0:40:53.81,Default,,0000,0000,0000,,And 1080p is at 1500 MBits per channel. Dialogue: 0,0:40:53.81,0:40:59.08,Default,,0000,0000,0000,,An FPGA is fast, but\Nthey’re not really that fast Dialogue: 0,0:40:59.08,0:41:03.95,Default,,0000,0000,0000,,at a range that I can afford to buy.\NI’m sure the military has ones Dialogue: 0,0:41:03.95,0:41:08.48,Default,,0000,0000,0000,,that go this fast, but\NI’m not as rich as them. Dialogue: 0,0:41:08.48,0:41:12.18,Default,,0000,0000,0000,,But they do include a nice hack\Nto solve this. Dialogue: 0,0:41:12.18,0:41:15.31,Default,,0000,0000,0000,,They are called SerDes.\NThey basically turn parallel data Dialogue: 0,0:41:15.31,0:41:18.79,Default,,0000,0000,0000,,into serial data. Dialogue: 0,0:41:18.79,0:41:21.83,Default,,0000,0000,0000,,This is what the boxes look like. Dialogue: 0,0:41:21.83,0:41:24.23,Default,,0000,0000,0000,,You give them your TDMS parallel data Dialogue: 0,0:41:24.23,0:41:27.94,Default,,0000,0000,0000,,and they convert it to\Nhigh speed serial data for you. Dialogue: 0,0:41:27.94,0:41:32.54,Default,,0000,0000,0000,,They are a little bit fiddly to use\Nand your best option is to go and find Dialogue: 0,0:41:32.54,0:41:37.40,Default,,0000,0000,0000,,a person who has already configured this\Nfor your FPGA Dialogue: 0,0:41:37.40,0:41:39.90,Default,,0000,0000,0000,,and follow what they do. Dialogue: 0,0:41:39.90,0:41:44.43,Default,,0000,0000,0000,,“Hamster” – Mike “Hamster” Field – has\Na really good documentation on Dialogue: 0,0:41:44.43,0:41:49.94,Default,,0000,0000,0000,,how to use these in a Spartan6.\NThese are also unique to your FPGA, Dialogue: 0,0:41:49.94,0:41:54.14,Default,,0000,0000,0000,,so different FPGAs are going to have\Ndifferent control schemes. Dialogue: 0,0:41:54.14,0:41:56.90,Default,,0000,0000,0000,,But if you are using a Spartan6 Dialogue: 0,0:41:56.90,0:42:02.39,Default,,0000,0000,0000,,then go and look up what\NMike “Hamster” Field is Dialogue: 0,0:42:02.39,0:42:07.77,Default,,0000,0000,0000,,doing for configuring these. Dialogue: 0,0:42:07.77,0:42:14.19,Default,,0000,0000,0000,,Remember how I said,\Nour system has a serial console. Dialogue: 0,0:42:14.19,0:42:18.63,Default,,0000,0000,0000,,Because we have that system\Nwe can actually delve quite deep Dialogue: 0,0:42:18.63,0:42:22.91,Default,,0000,0000,0000,,into what’s happening\Ninternally in the system. Dialogue: 0,0:42:22.91,0:42:25.11,Default,,0000,0000,0000,,{\i1}sip from bottle{\i0} Dialogue: 0,0:42:25.11,0:42:32.92,Default,,0000,0000,0000,,And print it out.\NThis is debugging from one of our systems. Dialogue: 0,0:42:32.92,0:42:35.14,Default,,0000,0000,0000,,You can see… Dialogue: 0,0:42:35.14,0:42:40.55,Default,,0000,0000,0000,,The first thing is the phase relationship\Nbetween each of the channels. Dialogue: 0,0:42:40.55,0:42:44.79,Default,,0000,0000,0000,,The next one is whether\Nwe’re getting valid data Dialogue: 0,0:42:44.79,0:42:49.77,Default,,0000,0000,0000,,on each of the channels and then\Nwe’ve got the error rate for that channel, Dialogue: 0,0:42:49.77,0:42:54.37,Default,,0000,0000,0000,,whether all channels synchronized,\Nand then some resolution information. Dialogue: 0,0:42:54.37,0:43:00.20,Default,,0000,0000,0000,,You can see that this has got\Na 74 MHz Pixel Clock. Dialogue: 0,0:43:00.20,0:43:05.08,Default,,0000,0000,0000,,There are three columns because\Nthere is Red, Green and Blue channels. Dialogue: 0,0:43:05.08,0:43:09.23,Default,,0000,0000,0000,,This give us some very interesting\Ndebugging capabilities. Dialogue: 0,0:43:09.23,0:43:13.21,Default,,0000,0000,0000,,If you plug in a cable\Nand you’re getting errors Dialogue: 0,0:43:13.21,0:43:17.24,Default,,0000,0000,0000,,on the Blue channel and nowhere else Dialogue: 0,0:43:17.24,0:43:21.56,Default,,0000,0000,0000,,it’s highly likely there’s\Nsomething wrong with that cable. Dialogue: 0,0:43:21.56,0:43:25.50,Default,,0000,0000,0000,,This is a very powerful tool\Nthat allows us to figure out Dialogue: 0,0:43:25.50,0:43:29.74,Default,,0000,0000,0000,,what’s going wrong in a system. Dialogue: 0,0:43:29.74,0:43:35.27,Default,,0000,0000,0000,,It’s something you can’t really get\Nwith the commercial versions of this. Dialogue: 0,0:43:35.27,0:43:39.06,Default,,0000,0000,0000,,But what about errors?\NEverything I’m talking about now Dialogue: 0,0:43:39.06,0:43:42.04,Default,,0000,0000,0000,,is a little bit experimental,\Nwe haven’t actually implemented this. Dialogue: 0,0:43:42.04,0:43:45.70,Default,,0000,0000,0000,,But it’s some ideas about\Nwhat we can do because we now Dialogue: 0,0:43:45.70,0:43:49.59,Default,,0000,0000,0000,,have complete control of our decoder. Dialogue: 0,0:43:49.59,0:43:54.22,Default,,0000,0000,0000,,As I said, there’s 124 possible choices\Nfor 10 bit symbols, Dialogue: 0,0:43:54.22,0:43:58.22,Default,,0000,0000,0000,,of which 460 are valid Pixel symbols, Dialogue: 0,0:43:58.22,0:44:02.39,Default,,0000,0000,0000,,4 are valid Control symbols\Nand 560 symbols Dialogue: 0,0:44:02.39,0:44:05.06,Default,,0000,0000,0000,,should never ever be seen no matter what. Dialogue: 0,0:44:05.06,0:44:11.89,Default,,0000,0000,0000,,That’s like 56% of our space\Nthat should never be seen. Dialogue: 0,0:44:11.89,0:44:16.33,Default,,0000,0000,0000,,But it’s actually better than that!\NWe know because of the running DC bias Dialogue: 0,0:44:16.33,0:44:25.05,Default,,0000,0000,0000,,that there are 256 valid Pixel symbols Dialogue: 0,0:44:25.05,0:44:31.15,Default,,0000,0000,0000,,at any one point. You can’t have the…\Nif you’ve got a negative DC bias Dialogue: 0,0:44:31.15,0:44:37.24,Default,,0000,0000,0000,,you can’t have a Pixel symbol\Nwhich continues to drive you negative. Dialogue: 0,0:44:37.24,0:44:43.71,Default,,0000,0000,0000,,Actually, 74% of our space at any time Dialogue: 0,0:44:43.71,0:44:48.03,Default,,0000,0000,0000,,is not allowed to exist. Dialogue: 0,0:44:48.03,0:44:52.07,Default,,0000,0000,0000,,This means that a huge number\Nof the invalid symbols Dialogue: 0,0:44:52.07,0:44:56.18,Default,,0000,0000,0000,,are only near one other valid symbol. Dialogue: 0,0:44:56.18,0:45:01.53,Default,,0000,0000,0000,,And so we can actually correct them!\NWe can go: “This symbol must have been Dialogue: 0,0:45:01.53,0:45:04.95,Default,,0000,0000,0000,,this other symbol,\Nbecause it’s not a valid symbol, Dialogue: 0,0:45:04.95,0:45:08.84,Default,,0000,0000,0000,,it must be a bit error\Nfrom this other symbol.” Dialogue: 0,0:45:08.84,0:45:12.87,Default,,0000,0000,0000,,So we can correct these errors.\NThis is quite cool. Dialogue: 0,0:45:12.87,0:45:19.03,Default,,0000,0000,0000,,We can correct about 70% of Dialogue: 0,0:45:19.03,0:45:21.97,Default,,0000,0000,0000,,single bit flip errors in Pixel data. Dialogue: 0,0:45:21.97,0:45:28.51,Default,,0000,0000,0000,,But sadly there is some that we can’t. Dialogue: 0,0:45:28.51,0:45:34.96,Default,,0000,0000,0000,,But we can detect that we got\Na invalid Pixel data. Dialogue: 0,0:45:34.96,0:45:40.32,Default,,0000,0000,0000,,So the fact that there is an error\Nis important. Dialogue: 0,0:45:40.32,0:45:43.91,Default,,0000,0000,0000,,In this case we’ve got two pixels\Nthat we received correctly Dialogue: 0,0:45:43.91,0:45:49.03,Default,,0000,0000,0000,,and we got a pixel that we know\Nis a invalid value Dialogue: 0,0:45:49.03,0:45:53.55,Default,,0000,0000,0000,,and then two more pixels\Nthat we received correctly. Dialogue: 0,0:45:53.55,0:45:55.18,Default,,0000,0000,0000,,You can imagine this is a Blue channel, Dialogue: 0,0:45:55.18,0:45:59.04,Default,,0000,0000,0000,,so the first ones were not very blue. Dialogue: 0,0:45:59.04,0:46:03.01,Default,,0000,0000,0000,,Then there’s the decoded value for this is Dialogue: 0,0:46:03.01,0:46:07.29,Default,,0000,0000,0000,,very, very blue, like very light blue\Nand then some other ones. Dialogue: 0,0:46:07.29,0:46:09.95,Default,,0000,0000,0000,,This looks really bad, right? Dialogue: 0,0:46:09.95,0:46:15.48,Default,,0000,0000,0000,,This was probably a whole blue block. Dialogue: 0,0:46:15.48,0:46:20.18,Default,,0000,0000,0000,,One pixel difference\Nof that big, that size, Dialogue: 0,0:46:20.18,0:46:24.03,Default,,0000,0000,0000,,is probably not a valid value, Dialogue: 0,0:46:24.03,0:46:26.44,Default,,0000,0000,0000,,and so we can cover them up! Dialogue: 0,0:46:26.44,0:46:29.68,Default,,0000,0000,0000,,We can go…\Nthe two pixels on either side Dialogue: 0,0:46:29.68,0:46:32.32,Default,,0000,0000,0000,,and average them and fix that pixel. Dialogue: 0,0:46:32.32,0:46:38.25,Default,,0000,0000,0000,,This allow us to correct a whole bunch\Nmore of errors that are occurring. Dialogue: 0,0:46:38.25,0:46:41.46,Default,,0000,0000,0000,,And as we’re about to take this data Dialogue: 0,0:46:41.46,0:46:45.94,Default,,0000,0000,0000,,and run it through a JPEG encoder Dialogue: 0,0:46:45.94,0:46:49.62,Default,,0000,0000,0000,,this doesn’t actually affect\Nthe quality of the output Dialogue: 0,0:46:49.62,0:46:53.15,Default,,0000,0000,0000,,all that much and allows to fix\Nthings that would otherwise Dialogue: 0,0:46:53.15,0:46:59.81,Default,,0000,0000,0000,,be giant glaring glitches in the output. Dialogue: 0,0:46:59.81,0:47:02.44,Default,,0000,0000,0000,,That’s some interesting information about Dialogue: 0,0:47:02.44,0:47:09.49,Default,,0000,0000,0000,,how you do TDMS decoding\Nand how we can fix some errors. Dialogue: 0,0:47:09.49,0:47:12.56,Default,,0000,0000,0000,,The thing is, we can do it\Neven better than this Dialogue: 0,0:47:12.56,0:47:15.53,Default,,0000,0000,0000,,because it’s an open source project. Dialogue: 0,0:47:15.53,0:47:19.60,Default,,0000,0000,0000,,Maybe you have some idea\Nabout how we can improve Dialogue: 0,0:47:19.60,0:47:22.89,Default,,0000,0000,0000,,the SerDes performance.\NMaybe you have an idea about Dialogue: 0,0:47:22.89,0:47:28.87,Default,,0000,0000,0000,,how to do TDMS decoding on\Nmuch lower power devices Dialogue: 0,0:47:28.87,0:47:33.54,Default,,0000,0000,0000,,than we use. It’s open source!\NYou can look at the code Dialogue: 0,0:47:33.54,0:47:39.10,Default,,0000,0000,0000,,and you can improve it.\NAnd we would love you to do it! Dialogue: 0,0:47:39.10,0:47:43.45,Default,,0000,0000,0000,,The thing is that I have a lot of hardware\Nbut not much time. Dialogue: 0,0:47:43.45,0:47:45.71,Default,,0000,0000,0000,,If you have lots of time\Nand not much hardware, Dialogue: 0,0:47:45.71,0:47:49.94,Default,,0000,0000,0000,,I think I can solve this problem. Dialogue: 0,0:47:49.94,0:47:54.79,Default,,0000,0000,0000,,These are links to the HDMI2USB project Dialogue: 0,0:47:54.79,0:47:58.84,Default,,0000,0000,0000,,and the TimVideos project;\Nand all our code, our hardware, Dialogue: 0,0:47:58.84,0:48:04.62,Default,,0000,0000,0000,,everything is on GitHub\Nunder open source licenses. Dialogue: 0,0:48:04.62,0:48:11.11,Default,,0000,0000,0000,,And here is some bonus screen shots that\NI wasn’t able to fit in other locations. Dialogue: 0,0:48:11.11,0:48:13.92,Default,,0000,0000,0000,,You can see these small errors. Dialogue: 0,0:48:13.92,0:48:16.84,Default,,0000,0000,0000,,That one was kind of a big error. Dialogue: 0,0:48:16.84,0:48:25.88,Default,,0000,0000,0000,,This is what happens when\Nyour DDR memory is slightly broken. Dialogue: 0,0:48:25.88,0:48:31.80,Default,,0000,0000,0000,,Yeah…\Nbut – yeah! Dialogue: 0,0:48:31.80,0:48:35.03,Default,,0000,0000,0000,,And that is my talk! Dialogue: 0,0:48:35.03,0:48:42.99,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:48:42.99,0:48:45.25,Default,,0000,0000,0000,,Herald: Excellent!\NThank you very much, mithro. Dialogue: 0,0:48:45.25,0:48:48.85,Default,,0000,0000,0000,,As you’ve noticed, we have a couple of\Nmicrophones standing around in the room. Dialogue: 0,0:48:48.85,0:48:52.96,Default,,0000,0000,0000,,If you have any questions for mithro\Nplease line up behind the microphones Dialogue: 0,0:48:52.96,0:48:57.95,Default,,0000,0000,0000,,and I will allow you to ask the questions.\NWe have question from the Internet!? Dialogue: 0,0:48:57.95,0:49:01.70,Default,,0000,0000,0000,,Signal Angel: Yes, thank you!\NDo you know if normal monitors Dialogue: 0,0:49:01.70,0:49:04.65,Default,,0000,0000,0000,,do similar error recovery or hiding? Dialogue: 0,0:49:04.65,0:49:08.91,Default,,0000,0000,0000,,Tim: I know of no commercial\Nimplementation that does Dialogue: 0,0:49:08.91,0:49:12.72,Default,,0000,0000,0000,,any type of error correction.\NThe solution for the commercial guys Dialogue: 0,0:49:12.72,0:49:19.84,Default,,0000,0000,0000,,is to effectively never get errors. Dialogue: 0,0:49:19.84,0:49:24.17,Default,,0000,0000,0000,,They can do that because Dialogue: 0,0:49:24.17,0:49:26.70,Default,,0000,0000,0000,,they don’t have to deal with\Nthe angry speakers on the ground Dialogue: 0,0:49:26.70,0:49:30.97,Default,,0000,0000,0000,,going wild as my slides look weird. Dialogue: 0,0:49:30.97,0:49:34.76,Default,,0000,0000,0000,,And, as well, they are probably working\Nwith better quality hardware Dialogue: 0,0:49:34.76,0:49:39.12,Default,,0000,0000,0000,,than we are using. We’re trying\Nto make things as cheap as possible. Dialogue: 0,0:49:39.12,0:49:43.72,Default,,0000,0000,0000,,And so we are pushing the boundaries\Nof a lot of the devices we are using. Dialogue: 0,0:49:43.72,0:49:48.25,Default,,0000,0000,0000,,So we are more likely to get\Nerrors than they are. Dialogue: 0,0:49:48.25,0:49:51.58,Default,,0000,0000,0000,,Herald: We have quite a lot of questions.\NRemember – questions, not comments! Dialogue: 0,0:49:51.58,0:49:55.52,Default,,0000,0000,0000,,Microphone number 1, please! Dialogue: 0,0:49:55.52,0:50:11.26,Default,,0000,0000,0000,,{\i1}rustling sound from audience{\i0}\N{\i1}coughing{\i0} Dialogue: 0,0:50:11.26,0:50:12.83,Default,,0000,0000,0000,,Tim: Yes! Dialogue: 0,0:50:12.83,0:50:18.18,Default,,0000,0000,0000,,{\i1}unrecognizable question from audience{\i0} Dialogue: 0,0:50:18.18,0:50:20.92,Default,,0000,0000,0000,,Sorry, I don’t quite understand\Nwhat’s going on! {\i1}chuckles{\i0} Dialogue: 0,0:50:20.92,0:50:27.40,Default,,0000,0000,0000,,Herald: Do we have a translation? Dialogue: 0,0:50:27.40,0:50:29.89,Default,,0000,0000,0000,,Voice from audience: Audio Angel! Dialogue: 0,0:50:29.89,0:50:34.22,Default,,0000,0000,0000,,Tim: Audio problem? Dialogue: 0,0:50:34.22,0:50:45.49,Default,,0000,0000,0000,,{\i1}Herald speaks to person\Nin front of stage in German{\i0} Dialogue: 0,0:50:45.49,0:50:51.53,Default,,0000,0000,0000,,Tim: I’ll be around afterwards,\NIf you want to chat to me, ahm… Dialogue: 0,0:50:51.53,0:50:57.11,Default,,0000,0000,0000,,Herald: And we might do that… ah…\Nwrite you on the computer afterwards. Dialogue: 0,0:50:57.11,0:51:01.53,Default,,0000,0000,0000,,Second question from\Nmicrophone number 3, please! Dialogue: 0,0:51:01.53,0:51:05.50,Default,,0000,0000,0000,,Question: Hello? Ah, yes. Can you\Ndetermine the quality of a HDMI cable, Dialogue: 0,0:51:05.50,0:51:08.52,Default,,0000,0000,0000,,e.g. by measuring bit error rate\Nof each three pairs Dialogue: 0,0:51:08.52,0:51:11.35,Default,,0000,0000,0000,,and also some jitter on the clock,\Nand that kind of…? Dialogue: 0,0:51:11.35,0:51:13.97,Default,,0000,0000,0000,,Tim: Yes we can! Dialogue: 0,0:51:13.97,0:51:18.10,Default,,0000,0000,0000,,The quality of a HDMI cable should be\Nthey’re zero bit errors. Dialogue: 0,0:51:18.10,0:51:23.54,Default,,0000,0000,0000,,So anything that has non-zero bit errors\Nwe chop up and throw away. Dialogue: 0,0:51:23.54,0:51:27.87,Default,,0000,0000,0000,,This gets interesting\Nwhen you have very long cables. Dialogue: 0,0:51:27.87,0:51:31.15,Default,,0000,0000,0000,,We can actually see that\Nthe longer the cable is Dialogue: 0,0:51:31.15,0:51:37.16,Default,,0000,0000,0000,,the harder for them\Nto keep zero bit errors. Dialogue: 0,0:51:37.16,0:51:43.23,Default,,0000,0000,0000,,So yes, we can kind of judge\Nthe quality of the cable. Dialogue: 0,0:51:43.23,0:51:47.50,Default,,0000,0000,0000,,But it’s also hard because Dialogue: 0,0:51:47.50,0:51:51.46,Default,,0000,0000,0000,,it depends on what the sender is doing. Dialogue: 0,0:51:51.46,0:51:54.75,Default,,0000,0000,0000,,If the sender is of a lower quality Dialogue: 0,0:51:54.75,0:51:58.07,Default,,0000,0000,0000,,and the cable is low quality\Nyou might get bit errors. Dialogue: 0,0:51:58.07,0:52:00.40,Default,,0000,0000,0000,,But if the sender is of a high quality Dialogue: 0,0:52:00.40,0:52:06.81,Default,,0000,0000,0000,,and the cable is of a lower quality Dialogue: 0,0:52:06.81,0:52:11.33,Default,,0000,0000,0000,,they might cancel each other out\Nand still be fine. Dialogue: 0,0:52:11.33,0:52:16.33,Default,,0000,0000,0000,,We can’t just go: “This is a good cable” Dialogue: 0,0:52:16.33,0:52:20.88,Default,,0000,0000,0000,,because we don’t actually have\Nany control over our… Dialogue: 0,0:52:20.88,0:52:25.81,Default,,0000,0000,0000,,how powerful our sender is on this device. Dialogue: 0,0:52:25.81,0:52:28.04,Default,,0000,0000,0000,,If we could kind of turn down the sender Dialogue: 0,0:52:28.04,0:52:31.21,Default,,0000,0000,0000,,and see where things start going wrong\Nthat would be pretty cool. Dialogue: 0,0:52:31.21,0:52:34.76,Default,,0000,0000,0000,,If anybody wants to\Nlook at building such a device Dialogue: 0,0:52:34.76,0:52:37.91,Default,,0000,0000,0000,,I’d love to help you do that. Dialogue: 0,0:52:37.91,0:52:41.30,Default,,0000,0000,0000,,Herald: We have another question\Nfrom microphone number 5. Dialogue: 0,0:52:41.30,0:52:44.88,Default,,0000,0000,0000,,Question: Your hardware,\Nthe HDMI2USB hardware… Dialogue: 0,0:52:44.88,0:52:47.90,Default,,0000,0000,0000,,Tim: Yes!\NQuestion: Is it available for simply ordering Dialogue: 0,0:52:47.90,0:52:51.97,Default,,0000,0000,0000,,or has it to be solder soldered by hand,\Nor… Dialogue: 0,0:52:51.97,0:52:56.28,Default,,0000,0000,0000,,Tim: You can not solder this board by\Nhand unless you are much, much better Dialogue: 0,0:52:56.28,0:53:01.79,Default,,0000,0000,0000,,than I am. It uses Ball Grid Array parts\Nbecause it’s an FPGA. Dialogue: 0,0:53:01.79,0:53:04.53,Default,,0000,0000,0000,,This is one here.\NYou can buy them. Dialogue: 0,0:53:04.53,0:53:10.02,Default,,0000,0000,0000,,We’re working with a manufacturer in India\Nwho builds them for us. Dialogue: 0,0:53:10.02,0:53:15.28,Default,,0000,0000,0000,,We work with them,\Nand it was pretty awesome. Dialogue: 0,0:53:15.28,0:53:17.54,Default,,0000,0000,0000,,We’re also working on new hardware.\NI’ve got a whole bunch Dialogue: 0,0:53:17.54,0:53:21.86,Default,,0000,0000,0000,,of FPGA hardware here\Nthat you can come and have a look at Dialogue: 0,0:53:21.86,0:53:25.92,Default,,0000,0000,0000,,and I’ll probably move it out\Ninto the hallway afterwards. Dialogue: 0,0:53:25.92,0:53:30.49,Default,,0000,0000,0000,,Again, if you’re interested\Nin the hardware and you have a use case, Dialogue: 0,0:53:30.49,0:53:35.10,Default,,0000,0000,0000,,chat to me!\NBecause I like to solve problems Dialogue: 0,0:53:35.10,0:53:39.46,Default,,0000,0000,0000,,of people who are not having hardware\Nand my employer pays me too much. Dialogue: 0,0:53:39.46,0:53:43.21,Default,,0000,0000,0000,,So I get to use my discretion refunds Dialogue: 0,0:53:43.21,0:53:47.71,Default,,0000,0000,0000,,for helping out people\Ndoing open source stuff. Dialogue: 0,0:53:47.71,0:53:54.50,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:53:54.50,0:53:59.22,Default,,0000,0000,0000,,Herald: We have at least four more\Nquestions. Microphone number 2, please! Dialogue: 0,0:53:59.22,0:54:05.03,Default,,0000,0000,0000,,Question: Do you think it would be\Npossible to get an 1080p image Dialogue: 0,0:54:05.03,0:54:09.78,Default,,0000,0000,0000,,out of the open source\Nhardware board you use? Dialogue: 0,0:54:09.78,0:54:16.96,Default,,0000,0000,0000,,Tim: Yes, I do, but it requires\Nus to do some hard work Dialogue: 0,0:54:16.96,0:54:19.07,Default,,0000,0000,0000,,that we haven’t had time to do yet. Dialogue: 0,0:54:19.07,0:54:26.99,Default,,0000,0000,0000,,And for us 720p at 60 frames\Nper second is good enough. Dialogue: 0,0:54:26.99,0:54:32.34,Default,,0000,0000,0000,,The USB connection Dialogue: 0,0:54:32.34,0:54:36.29,Default,,0000,0000,0000,,is limited in bandwidth because\Nwe don’t have an H.264 encoder, Dialogue: 0,0:54:36.29,0:54:43.02,Default,,0000,0000,0000,,we only have MJPEG. If somebody wants\Nto write us a open source, say, WebM Dialogue: 0,0:54:43.02,0:54:47.00,Default,,0000,0000,0000,,rather than H.264 encoder Dialogue: 0,0:54:47.00,0:54:50.71,Default,,0000,0000,0000,,that might start become more interesting.\NWe also have ethernet, Gigabit ethernet, Dialogue: 0,0:54:50.71,0:54:56.47,Default,,0000,0000,0000,,on this board. It should be pretty ease\Nto stream the data out the ethernet. Dialogue: 0,0:54:56.47,0:54:59.14,Default,,0000,0000,0000,,I, again, need help. Dialogue: 0,0:54:59.14,0:55:01.70,Default,,0000,0000,0000,,The ethernet controller works.\NWe can telnet into the board Dialogue: 0,0:55:01.70,0:55:07.05,Default,,0000,0000,0000,,and control it via Telnet.\NWe just need somebody to Dialogue: 0,0:55:07.05,0:55:11.47,Default,,0000,0000,0000,,actually connect the data,\Nthe high speed data side up. Dialogue: 0,0:55:11.47,0:55:14.78,Default,,0000,0000,0000,,We use it for debugging and stuff. Dialogue: 0,0:55:14.78,0:55:18.72,Default,,0000,0000,0000,,Mike “Hamster” Field again,\Nreally big thank you to him, Dialogue: 0,0:55:18.72,0:55:22.49,Default,,0000,0000,0000,,he is an amazing designer, Dialogue: 0,0:55:22.49,0:55:28.78,Default,,0000,0000,0000,,he built 1080p60 that is\Na little bit out-of-spec Dialogue: 0,0:55:28.78,0:55:33.12,Default,,0000,0000,0000,,but actually works really well on hardware Dialogue: 0,0:55:33.12,0:55:38.87,Default,,0000,0000,0000,,that is almost identical to ours.\NHe also did the DisplayPort, Dialogue: 0,0:55:38.87,0:55:43.49,Default,,0000,0000,0000,,like a 4k-DisplayPort which\Nwe can do on our board. Dialogue: 0,0:55:43.49,0:55:49.63,Default,,0000,0000,0000,,If you only need one or two\Nof the 1080p things Dialogue: 0,0:55:49.63,0:55:52.67,Default,,0000,0000,0000,,DisplayPort connectors can be\Nconverted to HDMI quite easily Dialogue: 0,0:55:52.67,0:55:56.50,Default,,0000,0000,0000,,and you can do that on them. Dialogue: 0,0:55:56.50,0:55:58.85,Default,,0000,0000,0000,,Yes, I think that’s possible,\Nbut again: Dialogue: 0,0:55:58.85,0:56:05.90,Default,,0000,0000,0000,,open source … hobbyist …\Nneed developers … Dialogue: 0,0:56:05.90,0:56:07.99,Default,,0000,0000,0000,,Herald: We’ll take one question\Nfrom the internet! Dialogue: 0,0:56:07.99,0:56:12.87,Default,,0000,0000,0000,,Signal Angel: Thank you. Have you\Nconsidered JPEG2000? Dialogue: 0,0:56:12.87,0:56:17.86,Default,,0000,0000,0000,,Tim: No, I’ve not. And the main reason\Nis that I want to be a webcam. Dialogue: 0,0:56:17.86,0:56:25.78,Default,,0000,0000,0000,,I want to pretend to be a webcam. The UVC\Nstandard, which is the USB webcam standard, Dialogue: 0,0:56:25.78,0:56:30.72,Default,,0000,0000,0000,,does not support JPEG2000. Dialogue: 0,0:56:30.72,0:56:34.26,Default,,0000,0000,0000,,There’s no reason we couldn’t support\NJPEG2000 when connected to Linux, Dialogue: 0,0:56:34.26,0:56:38.77,Default,,0000,0000,0000,,like we could fix the Linux driver\Nto add JPEG2000 support. Dialogue: 0,0:56:38.77,0:56:44.89,Default,,0000,0000,0000,,Again, I don’t know if there’s any good\Nopen source FPGA implementations Dialogue: 0,0:56:44.89,0:56:52.67,Default,,0000,0000,0000,,of JPEG2000? So, that’s also a blocker. Dialogue: 0,0:56:52.67,0:56:57.50,Default,,0000,0000,0000,,But if you’re interested in helping out\N– come and talk to me. Dialogue: 0,0:56:57.50,0:57:01.78,Default,,0000,0000,0000,,As I said, I would very much love Dialogue: 0,0:57:01.78,0:57:06.60,Default,,0000,0000,0000,,to chat to you and solve\Nthe problems you’re having Dialogue: 0,0:57:06.60,0:57:11.54,Default,,0000,0000,0000,,with getting-going.\NAs well, we have t-shirts. Dialogue: 0,0:57:11.54,0:57:16.41,Default,,0000,0000,0000,,I’m wearing a t-shirt that we have, and\NI will send everybody who contributes Dialogue: 0,0:57:16.41,0:57:23.78,Default,,0000,0000,0000,,a t-shirt. Whether that’s fixing our\Nwebsite, helping on documentation, Dialogue: 0,0:57:23.78,0:57:28.05,Default,,0000,0000,0000,,helping people on IRC\Ngetting setup, anything. Dialogue: 0,0:57:28.05,0:57:34.32,Default,,0000,0000,0000,,You don’t need to be an expert\Non FPGA stuff to help out. Dialogue: 0,0:57:34.32,0:57:38.41,Default,,0000,0000,0000,,And we also are working on\Na little project to run MicroPython Dialogue: 0,0:57:38.41,0:57:43.16,Default,,0000,0000,0000,,on FPGAs. So if you’re really into Python\Nand you like MicroPython Dialogue: 0,0:57:43.16,0:57:48.06,Default,,0000,0000,0000,,I would love to help you help us do that. Dialogue: 0,0:57:48.06,0:57:53.26,Default,,0000,0000,0000,,It’s kind of working. We just need more\Npowerful (?) support. So. Dialogue: 0,0:57:53.26,0:57:56.23,Default,,0000,0000,0000,,Herald: We have two more questions from\Nmicrophone number 1. Dialogue: 0,0:57:56.23,0:57:59.48,Default,,0000,0000,0000,,Question: So, is there some sort of\Ndedicated processor on that board, Dialogue: 0,0:57:59.48,0:58:02.39,Default,,0000,0000,0000,,or do you use like a Microblaze\Nin the FPGA? Dialogue: 0,0:58:02.39,0:58:06.81,Default,,0000,0000,0000,,Tim: We use an open source soft core.\NOne of three. Dialogue: 0,0:58:06.81,0:58:11.82,Default,,0000,0000,0000,,We can change which soft core\Nwe’re using with a command line flag. Dialogue: 0,0:58:11.82,0:58:16.39,Default,,0000,0000,0000,,We’re using either the LatticeMico32 Dialogue: 0,0:58:16.39,0:58:19.79,Default,,0000,0000,0000,,which is produced\Nby Lattice Semiconductor. Dialogue: 0,0:58:19.79,0:58:24.55,Default,,0000,0000,0000,,We can use the OpenRISC-1000 Dialogue: 0,0:58:24.55,0:58:28.53,Default,,0000,0000,0000,,or we can use a RISC-V processor. Dialogue: 0,0:58:28.53,0:58:34.75,Default,,0000,0000,0000,,We generally default to LM32\Nbecause it’s the most performance Dialogue: 0,0:58:34.75,0:58:40.43,Default,,0000,0000,0000,,for least FPGA resource trade-off. Dialogue: 0,0:58:40.43,0:58:46.24,Default,,0000,0000,0000,,But if you like RISC-V\Nor OpenRISC-1000 better Dialogue: 0,0:58:46.24,0:58:51.92,Default,,0000,0000,0000,,for some reason, say, you want\Nto run Linux on our soft core, Dialogue: 0,0:58:51.92,0:58:58.45,Default,,0000,0000,0000,,then you can do that. With a one line\Ncommand line change, yeah! Dialogue: 0,0:58:58.45,0:59:03.73,Default,,0000,0000,0000,,We’re looking at adding\NJ-Core support in early next year. Dialogue: 0,0:59:03.73,0:59:07.91,Default,,0000,0000,0000,,J-Core is quite big, though,\Ncompared to LM32. So, Dialogue: 0,0:59:07.91,0:59:11.52,Default,,0000,0000,0000,,it probably won’t fit on some\Nof the very small devices. Dialogue: 0,0:59:11.52,0:59:14.27,Default,,0000,0000,0000,,Question: So it’s a Lattice FPGA? Dialogue: 0,0:59:14.27,0:59:21.25,Default,,0000,0000,0000,,Tim: It’s a Spartan6 FPGA. And our new\Nboards will probably be Artix-7 Dialogue: 0,0:59:21.25,0:59:24.18,Default,,0000,0000,0000,,But we’re still in the process\Nof making them exist yet. Dialogue: 0,0:59:24.18,0:59:25.66,Default,,0000,0000,0000,,Question: Thanks.\NTim: I’ve also been working with Dialogue: 0,0:59:25.66,0:59:30.29,Default,,0000,0000,0000,,bunnie’s NeTV2, porting\Nour firmware to that, Dialogue: 0,0:59:30.29,0:59:33.46,Default,,0000,0000,0000,,which has been really awesome.\NHe’s doing some cool work there, Dialogue: 0,0:59:33.46,0:59:39.91,Default,,0000,0000,0000,,and he’s kind of inspired this whole\Ndevelopment by showing that, Dialogue: 0,0:59:39.91,0:59:43.42,Default,,0000,0000,0000,,yes, you could do this,\Nand you shouldn’t be scared of it. Dialogue: 0,0:59:43.42,0:59:45.82,Default,,0000,0000,0000,,Herald: Good, one more question\Nfrom microphone number 1. Dialogue: 0,0:59:45.82,0:59:53.88,Default,,0000,0000,0000,,Question: Yes. Do you have any plans for\Nincorporating HD-SDI into your platform? Dialogue: 0,0:59:53.88,0:59:58.56,Default,,0000,0000,0000,,Tim: Yes and no!\NWe have plans and ideas Dialogue: 0,0:59:58.56,1:00:01.65,Default,,0000,0000,0000,,that we could do it Dialogue: 0,1:00:01.65,1:00:07.33,Default,,0000,0000,0000,,but HD-SDI Dialogue: 0,1:00:07.33,1:00:13.23,Default,,0000,0000,0000,,and all of the SDI protocols are\Nmuch harder for the consumer, Dialogue: 0,1:00:13.23,1:00:17.33,Default,,0000,0000,0000,,generally to access, and we want\Nto drive the costs of this down Dialogue: 0,1:00:17.33,1:00:22.07,Default,,0000,0000,0000,,to as low as it can go. And… Dialogue: 0,1:00:22.07,1:00:26.06,Default,,0000,0000,0000,,HDMI is a consumer electronic thing.\NYou get it on everything. Dialogue: 0,1:00:26.06,1:00:30.17,Default,,0000,0000,0000,,You get it on your\Nlike five-buck Raspberry Pi. Dialogue: 0,1:00:30.17,1:00:35.12,Default,,0000,0000,0000,,HDMI is probably\Na really good solution for this. Dialogue: 0,1:00:35.12,1:00:38.19,Default,,0000,0000,0000,,We haven’t developed any SDI cores\Nor anything like that, Dialogue: 0,1:00:38.19,1:00:43.33,Default,,0000,0000,0000,,so I can’t tell you like\Nthat we’re doing anything there Dialogue: 0,1:00:43.33,1:00:49.46,Default,,0000,0000,0000,,but if somebody’s interested, again,\NI like to remove roll (?) blocks and Dialogue: 0,1:00:49.46,1:00:53.23,Default,,0000,0000,0000,,we would love to have people work on that. Dialogue: 0,1:00:53.23,1:00:56.26,Default,,0000,0000,0000,,Herald: We have one more question from\Nthe internet and we have two minutes left. Dialogue: 0,1:00:56.26,1:01:01.81,Default,,0000,0000,0000,,Signal Angel: OK, thank you. The question\Nis not related to HDMI but to FPGAs. Dialogue: 0,1:01:01.81,1:01:06.17,Default,,0000,0000,0000,,FPGAs are programmed in a high level\Nlanguage like VERILOG or… Dialogue: 0,1:01:06.17,1:01:11.03,Default,,0000,0000,0000,,after simulation you compile. So every\Nvendor has created his own compiler Dialogue: 0,1:01:11.03,1:01:15.99,Default,,0000,0000,0000,,for its own hardware. Are you aware of\Na move to open source compilers Dialogue: 0,1:01:15.99,1:01:21.22,Default,,0000,0000,0000,,or to independent hardware? And do you see\Na benefit in open source FPGA compilers? Dialogue: 0,1:01:21.22,1:01:27.45,Default,,0000,0000,0000,,Tim: Yes! If anybody knows Dialogue: 0,1:01:27.45,1:01:30.59,Default,,0000,0000,0000,,about FPGAs you know\Nthey use proprietary compilers. Dialogue: 0,1:01:30.59,1:01:35.51,Default,,0000,0000,0000,,And these proprietary compilers\Nare terrible. Dialogue: 0,1:01:35.51,1:01:39.56,Default,,0000,0000,0000,,I’m a software engineer.\NIf I find a bug in gcc Dialogue: 0,1:01:39.56,1:01:43.75,Default,,0000,0000,0000,,I can fix the bug. I’ve got those skills,\Nand I can move forward or at least Dialogue: 0,1:01:43.75,1:01:47.22,Default,,0000,0000,0000,,figure out why the hell the bug occurred. Dialogue: 0,1:01:47.22,1:01:51.60,Default,,0000,0000,0000,,That is not the case with FPGA compilers.\NThe FPGA compiler we use Dialogue: 0,1:01:51.60,1:01:56.97,Default,,0000,0000,0000,,is non-deterministic. You can give it\Nthe same source code and it produces Dialogue: 0,1:01:56.97,1:02:01.80,Default,,0000,0000,0000,,different output. I’d love somebody\Nto reverse-engineer why that occurs Dialogue: 0,1:02:01.80,1:02:07.47,Default,,0000,0000,0000,,because I’ve removed all the randomness\Nfrom random sources from it Dialogue: 0,1:02:07.47,1:02:11.89,Default,,0000,0000,0000,,and it still manages to do it!\NI’m really impressed. So, Dialogue: 0,1:02:11.89,1:02:16.94,Default,,0000,0000,0000,,Clifford has done an open source\NFPGA tool chain Dialogue: 0,1:02:16.94,1:02:21.98,Default,,0000,0000,0000,,for the Lattice iCEstick things. Dialogue: 0,1:02:21.98,1:02:28.94,Default,,0000,0000,0000,,He said he’s gonna work\Non the Actrix7 FPGAs. Dialogue: 0,1:02:28.94,1:02:34.18,Default,,0000,0000,0000,,Please donate to him and help him.\NI would… like… Dialogue: 0,1:02:34.18,1:02:38.03,Default,,0000,0000,0000,,if that exists I owe people who…\Nlike a bazillion of beers, because Dialogue: 0,1:02:38.03,1:02:43.27,Default,,0000,0000,0000,,the sooner I can get off proprietary\Ntool chains the happier I will be, Dialogue: 0,1:02:43.27,1:02:48.73,Default,,0000,0000,0000,,and it will make my hobby so much nicer.\NSo, please help him! Dialogue: 0,1:02:48.73,1:02:50.93,Default,,0000,0000,0000,,Herald: And do give Tim\Na big round of applause! Dialogue: 0,1:02:50.93,1:02:54.51,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,1:02:54.51,1:02:58.30,Default,,0000,0000,0000,,{\i1}postroll music{\i0} Dialogue: 0,1:02:58.30,1:03:18.50,Default,,0000,0000,0000,,{\i1}subtitles created by c3subtitles.de\Nin the year 2017. Join, and help us!{\i0}