0 00:00:00,000 --> 00:00:30,000 Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/117 Thanks! 1 00:00:10,190 --> 00:00:11,269 Good evening, humans. 2 00:00:12,290 --> 00:00:14,089 Today, I bring you Kirsten Becker, who 3 00:00:14,090 --> 00:00:16,429 last year gave a crash course here 4 00:00:16,430 --> 00:00:19,099 on FPGA and 5 00:00:19,100 --> 00:00:20,929 figured out the that's actually pretty 6 00:00:20,930 --> 00:00:23,029 hard to explain to people and put 7 00:00:23,030 --> 00:00:24,469 in the work to make it easier. 8 00:00:24,470 --> 00:00:25,470 Enjoy. 9 00:00:26,660 --> 00:00:28,670 My name is Carson. 10 00:00:35,100 --> 00:00:37,049 Oh, I forgot an introduction slide, but 11 00:00:37,050 --> 00:00:38,050 my name is Carson. 12 00:00:38,820 --> 00:00:41,189 I'm a part time scientist working 13 00:00:41,190 --> 00:00:43,499 on a mission to the Moon, and I'm also 14 00:00:43,500 --> 00:00:45,719 a Ph.D. candidate at the Tea 15 00:00:45,720 --> 00:00:48,959 Handbook, and as such, I'm 16 00:00:48,960 --> 00:00:51,719 I'm researching on FPGA architectures. 17 00:00:51,720 --> 00:00:53,849 And one of the things that annoyed me the 18 00:00:53,850 --> 00:00:55,979 most when I was starting 19 00:00:55,980 --> 00:00:58,679 to work was FPGA architectures is 20 00:00:58,680 --> 00:01:01,379 that there is no proper input language. 21 00:01:01,380 --> 00:01:03,749 I this is what I claim here. 22 00:01:03,750 --> 00:01:05,939 I basically say that video 23 00:01:05,940 --> 00:01:07,679 and very log, which are the two most 24 00:01:07,680 --> 00:01:09,719 common languages which are used for 25 00:01:09,720 --> 00:01:12,219 programing FPGA are 26 00:01:12,220 --> 00:01:14,909 are very hard to learn or 27 00:01:14,910 --> 00:01:16,919 just a quick quote. 28 00:01:16,920 --> 00:01:19,169 Who have you has ever programs and FPGA? 29 00:01:19,170 --> 00:01:21,599 And that's good. 30 00:01:21,600 --> 00:01:23,849 Who of you really enjoys programing 31 00:01:23,850 --> 00:01:25,439 and you hate it? 32 00:01:27,630 --> 00:01:29,579 Who have you enjoyed programing in? 33 00:01:29,580 --> 00:01:30,580 Very long? 34 00:01:31,420 --> 00:01:32,420 Hey, there's one guy. 35 00:01:33,630 --> 00:01:34,630 OK, too. 36 00:01:35,220 --> 00:01:37,469 OK, so I guess you 37 00:01:37,470 --> 00:01:38,399 kind of agree that. 38 00:01:38,400 --> 00:01:39,749 Video and VIDEO Look, I'm not the best 39 00:01:39,750 --> 00:01:42,059 languages for programing 40 00:01:42,060 --> 00:01:44,249 languages or, in my opinion, 41 00:01:44,250 --> 00:01:46,379 also, the tools are very 42 00:01:46,380 --> 00:01:48,689 hard to use or confusing, 43 00:01:48,690 --> 00:01:51,029 to be more precise as they are. 44 00:01:51,030 --> 00:01:53,159 You know, it looks like a space shuttle 45 00:01:53,160 --> 00:01:55,049 cockpit and it should not be. 46 00:01:55,050 --> 00:01:56,549 Look, it should not look like this should 47 00:01:56,550 --> 00:01:58,079 be much simpler. 48 00:01:58,080 --> 00:01:59,700 And so 49 00:02:00,840 --> 00:02:03,149 what I want to do is I want to bring 50 00:02:03,150 --> 00:02:05,399 the simplicity of Arduino to the world 51 00:02:05,400 --> 00:02:07,709 of FPGAs, and I developed 52 00:02:07,710 --> 00:02:09,809 quite a bit, but I 53 00:02:09,810 --> 00:02:11,550 want to show you today. 54 00:02:12,750 --> 00:02:15,839 So the primary goal that I had, 55 00:02:15,840 --> 00:02:17,919 by the way, I invented 56 00:02:17,920 --> 00:02:20,189 the language that I call PSR HDL, 57 00:02:20,190 --> 00:02:22,049 which stands for plain, simple 58 00:02:22,050 --> 00:02:23,459 description language. 59 00:02:23,460 --> 00:02:25,859 So it's really aimed at people that 60 00:02:25,860 --> 00:02:27,929 know, see so that 61 00:02:27,930 --> 00:02:29,759 they can read and understand what it's 62 00:02:29,760 --> 00:02:30,869 doing. 63 00:02:30,870 --> 00:02:32,250 But it has the semantics of 64 00:02:33,420 --> 00:02:35,789 a very visual and very loud, but 65 00:02:35,790 --> 00:02:38,159 without the fucking ugliness the 66 00:02:38,160 --> 00:02:39,869 other languages bring with them. 67 00:02:39,870 --> 00:02:42,209 So I wanted to have 68 00:02:42,210 --> 00:02:43,919 their own solution. People should be able 69 00:02:43,920 --> 00:02:46,109 to get started in like no 70 00:02:46,110 --> 00:02:48,539 time, which is like the 71 00:02:48,540 --> 00:02:51,239 exact opposite of all the people that 72 00:02:51,240 --> 00:02:53,579 were at my workshop like yesterday 73 00:02:53,580 --> 00:02:55,649 that they don't loaded the six 74 00:02:55,650 --> 00:02:58,049 year but file for exciting things. 75 00:02:58,050 --> 00:03:00,269 Then they installed one, 76 00:03:00,270 --> 00:03:01,949 which took like 20 could you would have 77 00:03:01,950 --> 00:03:03,569 had to space. 78 00:03:03,570 --> 00:03:06,029 And on the Linux machine, it 79 00:03:06,030 --> 00:03:08,279 almost works then. 80 00:03:08,280 --> 00:03:10,409 So this is not what I'm aiming 81 00:03:10,410 --> 00:03:12,839 for. I really want to have people 82 00:03:12,840 --> 00:03:15,209 to be able to download something, 83 00:03:15,210 --> 00:03:17,279 get started very quickly 84 00:03:17,280 --> 00:03:19,649 and get to the success very quickly. 85 00:03:19,650 --> 00:03:21,719 And it should be easy to learn 86 00:03:21,720 --> 00:03:24,309 and should be user friendly was 87 00:03:24,310 --> 00:03:26,849 with error messages that are actually 88 00:03:26,850 --> 00:03:29,129 understandable by humans, which 89 00:03:29,130 --> 00:03:31,259 is a very hard thing to do and 90 00:03:32,500 --> 00:03:34,619 is not not quite 91 00:03:34,620 --> 00:03:36,659 there yet. But I think it's doing much 92 00:03:36,660 --> 00:03:38,969 better than than what 93 00:03:38,970 --> 00:03:41,119 some of the video tools are doing 94 00:03:41,120 --> 00:03:42,120 other in. 95 00:03:42,900 --> 00:03:44,029 But it's important. 96 00:03:44,030 --> 00:03:46,149 Well, I'm just going to show you that I 97 00:03:46,150 --> 00:03:47,399 chose a new language. 98 00:03:47,400 --> 00:03:49,799 I don't want you to think about 99 00:03:49,800 --> 00:03:52,079 as I'm going to think about it as 100 00:03:52,080 --> 00:03:54,029 just the new language. 101 00:03:54,030 --> 00:03:56,849 It's really the foundation of building 102 00:03:56,850 --> 00:03:58,769 much simpler tools for programing 103 00:03:58,770 --> 00:03:59,669 languages. 104 00:03:59,670 --> 00:04:01,740 It's an open source, free 105 00:04:02,910 --> 00:04:05,340 environment, and I want you to 106 00:04:07,410 --> 00:04:08,769 take a look at this if you like it. 107 00:04:08,770 --> 00:04:10,769 You know you can. 108 00:04:10,770 --> 00:04:12,269 You can contribute to it. 109 00:04:12,270 --> 00:04:13,889 That would be very awesome. 110 00:04:13,890 --> 00:04:16,528 And I think that the possibilities 111 00:04:16,529 --> 00:04:18,838 that it opens up are 112 00:04:18,839 --> 00:04:20,939 are very good because it is you don't 113 00:04:20,940 --> 00:04:22,499 need to hack into the source, but you 114 00:04:22,500 --> 00:04:24,719 can. There are several extension points 115 00:04:24,720 --> 00:04:26,249 where you can hook into. 116 00:04:26,250 --> 00:04:29,789 So I want to create a new collaborative 117 00:04:29,790 --> 00:04:31,379 community where people, you know, are 118 00:04:31,380 --> 00:04:33,449 like supporting each other very, very 119 00:04:33,450 --> 00:04:35,879 nice tutorials to get started with, 120 00:04:35,880 --> 00:04:38,309 with programing languages. 121 00:04:38,310 --> 00:04:39,310 So 122 00:04:40,410 --> 00:04:42,599 it may sound crazy to some of the people 123 00:04:42,600 --> 00:04:44,219 you know that's coming from the idea 124 00:04:44,220 --> 00:04:46,409 industry that that you could 125 00:04:46,410 --> 00:04:48,539 actually use a browser as 126 00:04:48,540 --> 00:04:51,689 an integrated development environment. 127 00:04:51,690 --> 00:04:54,629 But what I'm going to show you, 128 00:04:54,630 --> 00:04:56,699 I think kind of kind of fulfills 129 00:04:56,700 --> 00:04:58,889 that. It was very powerful 130 00:04:58,890 --> 00:05:01,229 from an editing perspective. 131 00:05:01,230 --> 00:05:03,749 It has our marketing on save 132 00:05:03,750 --> 00:05:05,879 and which is more than you can 133 00:05:05,880 --> 00:05:08,669 say for any other exciting 134 00:05:08,670 --> 00:05:09,670 tools. 135 00:05:10,890 --> 00:05:13,199 And even it 136 00:05:13,200 --> 00:05:15,959 invites collaboration because 137 00:05:15,960 --> 00:05:17,339 if you have a problem with some source 138 00:05:17,340 --> 00:05:18,709 code, you just point around the 139 00:05:20,280 --> 00:05:22,769 URL and you can get 140 00:05:22,770 --> 00:05:25,019 help by whoever 141 00:05:25,020 --> 00:05:26,849 you send the address to. 142 00:05:26,850 --> 00:05:28,049 Hopefully, he knows it's there. 143 00:05:28,050 --> 00:05:29,050 That would be very helpful. 144 00:05:31,110 --> 00:05:32,779 Yeah. And so most of the time. 145 00:05:32,780 --> 00:05:34,970 I will give a demo because I think 146 00:05:36,200 --> 00:05:38,329 seeing is believing and I hope 147 00:05:38,330 --> 00:05:39,979 it works. Yesterday, it didn't work so 148 00:05:39,980 --> 00:05:42,079 well, but I hope today it 149 00:05:42,080 --> 00:05:43,469 goes better. 150 00:05:43,470 --> 00:05:44,470 So 151 00:05:46,850 --> 00:05:47,999 this is good. 152 00:05:48,000 --> 00:05:50,569 Mm hmm. 153 00:05:50,570 --> 00:05:51,570 OK. 154 00:05:52,340 --> 00:05:53,930 So what are you? Are starting with this? 155 00:05:55,220 --> 00:05:57,259 You have you have a book space. 156 00:05:57,260 --> 00:05:58,729 I can. I can make it. 157 00:05:58,730 --> 00:06:00,799 So you have 158 00:06:00,800 --> 00:06:02,399 a website here. 159 00:06:03,800 --> 00:06:05,329 One more. Oh, this very daring. 160 00:06:07,730 --> 00:06:09,649 OK, so it doesn't scale very well with 161 00:06:09,650 --> 00:06:11,389 your eyes at some point as we might break 162 00:06:11,390 --> 00:06:12,390 and I have to go back. But. 163 00:06:14,090 --> 00:06:16,459 So the first thing that that you invited 164 00:06:16,460 --> 00:06:18,679 was this is a top where you can learn 165 00:06:18,680 --> 00:06:20,089 about it. 166 00:06:20,090 --> 00:06:22,609 It gives you a very quick introduction 167 00:06:22,610 --> 00:06:23,610 into the language 168 00:06:25,520 --> 00:06:27,589 and make some very simple stuff. 169 00:06:28,820 --> 00:06:31,099 And the next step 170 00:06:31,100 --> 00:06:32,809 that you want to do before you are going 171 00:06:32,810 --> 00:06:34,969 to create some code is you're 172 00:06:34,970 --> 00:06:36,469 going to create a workspace. 173 00:06:36,470 --> 00:06:38,119 The workspace is like the 174 00:06:39,410 --> 00:06:41,119 container for the files that you are 175 00:06:41,120 --> 00:06:43,309 working on and the 176 00:06:43,310 --> 00:06:44,659 email address. It doesn't really matter 177 00:06:44,660 --> 00:06:45,660 what you're entering here. 178 00:06:47,360 --> 00:06:49,879 It's just that, you know, in case 179 00:06:49,880 --> 00:06:51,619 my server goes up into smoke or I do 180 00:06:51,620 --> 00:06:53,239 something that is incredibly 181 00:06:53,240 --> 00:06:56,479 uncomfortable with your files, then 182 00:06:56,480 --> 00:06:58,759 I might notify you that your files 183 00:06:58,760 --> 00:07:01,399 might be lost or something 184 00:07:01,400 --> 00:07:03,169 if you're not interested in that and just 185 00:07:03,170 --> 00:07:04,639 enter whatever you want. 186 00:07:04,640 --> 00:07:06,109 I will not be able to give it to the NSA 187 00:07:06,110 --> 00:07:07,429 or something. 188 00:07:07,430 --> 00:07:10,069 Um, so 189 00:07:10,070 --> 00:07:11,569 I can't spell my name for record. 190 00:07:12,950 --> 00:07:14,149 So no, you have a workspace. 191 00:07:15,750 --> 00:07:17,849 And you can, for example, 192 00:07:17,850 --> 00:07:19,919 create a new file and 193 00:07:19,920 --> 00:07:22,019 you are greeted with an example. 194 00:07:22,020 --> 00:07:24,179 And this example of this is just, you 195 00:07:24,180 --> 00:07:26,489 know, adding everything to make it 196 00:07:26,490 --> 00:07:27,659 a bit more bigger. 197 00:07:27,660 --> 00:07:28,979 I guess so. 198 00:07:28,980 --> 00:07:30,269 Um. 199 00:07:30,270 --> 00:07:32,039 Maybe one what not. 200 00:07:32,040 --> 00:07:33,040 OK. 201 00:07:34,290 --> 00:07:36,479 So if this, for example, this is 202 00:07:36,480 --> 00:07:38,699 a very simple module, which 203 00:07:38,700 --> 00:07:41,069 is called my first module and it contains 204 00:07:41,070 --> 00:07:43,619 the register, which is called some. 205 00:07:43,620 --> 00:07:45,749 And it's an unsigned integer which 206 00:07:45,750 --> 00:07:47,969 has a list of 12 207 00:07:47,970 --> 00:07:50,399 bits and it has 208 00:07:50,400 --> 00:07:53,099 two inputs which are called A and B, 209 00:07:53,100 --> 00:07:54,239 and it's adding them. 210 00:07:55,410 --> 00:07:57,539 So yeah, you're going to save that 211 00:07:57,540 --> 00:07:59,040 as a file and then you have a file. 212 00:08:00,600 --> 00:08:02,819 What's also interesting is you have some 213 00:08:02,820 --> 00:08:04,739 nice examples here where you can see how 214 00:08:04,740 --> 00:08:07,229 your modulates, for example, 215 00:08:07,230 --> 00:08:08,519 a home. 216 00:08:09,900 --> 00:08:11,999 You see, those two things are if you 217 00:08:12,000 --> 00:08:14,189 would see the video code, I can actually 218 00:08:14,190 --> 00:08:15,190 show you the code. 219 00:08:16,620 --> 00:08:18,629 You know, then you see that this is 220 00:08:18,630 --> 00:08:20,730 really much shorter than anything that 221 00:08:21,960 --> 00:08:22,859 that you want to write in. 222 00:08:22,860 --> 00:08:24,089 VIDEO So. 223 00:08:24,090 --> 00:08:26,489 And this this 224 00:08:26,490 --> 00:08:28,709 button here, for example, I can 225 00:08:28,710 --> 00:08:30,779 I can generate video code, 226 00:08:30,780 --> 00:08:32,908 which is what you want to 227 00:08:32,909 --> 00:08:35,279 put into your synthesis tools 228 00:08:35,280 --> 00:08:36,329 then. 229 00:08:36,330 --> 00:08:37,330 And 230 00:08:38,669 --> 00:08:40,509 so you see the video code here. 231 00:08:40,510 --> 00:08:42,058 You know this. Remember, this is like 232 00:08:42,059 --> 00:08:44,038 three lines and it's still in. 233 00:08:44,039 --> 00:08:45,599 It's twenty eight and video 234 00:08:46,710 --> 00:08:48,989 and it doesn't make the 235 00:08:48,990 --> 00:08:51,149 same mistakes that the students are 236 00:08:51,150 --> 00:08:53,459 doing that I have at my university, 237 00:08:53,460 --> 00:08:54,569 for example. 238 00:08:54,570 --> 00:08:55,709 You know, if you know, if you still, you 239 00:08:55,710 --> 00:08:57,299 know, are very look, it's actually quite 240 00:08:57,300 --> 00:08:59,099 the same. There is a sensitivity list, 241 00:08:59,100 --> 00:09:00,269 and if you fucked it up, then the 242 00:09:00,270 --> 00:09:01,889 simulation is not the same as what you 243 00:09:01,890 --> 00:09:03,239 get on the hardware. 244 00:09:03,240 --> 00:09:05,189 And this is very confusing. 245 00:09:05,190 --> 00:09:07,259 And so when you're using 246 00:09:07,260 --> 00:09:09,359 ratio, this will not be an issue 247 00:09:09,360 --> 00:09:11,639 for you and the wrong 248 00:09:11,640 --> 00:09:13,169 looks a bit different like this. 249 00:09:14,280 --> 00:09:16,259 So you can download the files manually or 250 00:09:16,260 --> 00:09:17,940 can download the files as a zip file. 251 00:09:19,560 --> 00:09:21,299 This is not too exciting yet, 252 00:09:23,400 --> 00:09:25,679 but what's very interesting about 253 00:09:25,680 --> 00:09:27,899 this idea is that you can actually 254 00:09:29,550 --> 00:09:31,649 compilers to another 255 00:09:31,650 --> 00:09:33,869 language like C Java 256 00:09:33,870 --> 00:09:35,459 or JavaScript. 257 00:09:35,460 --> 00:09:37,379 And what that means is that I can 258 00:09:37,380 --> 00:09:40,289 actually run a simulation in the browser. 259 00:09:40,290 --> 00:09:42,359 And so what I'm doing 260 00:09:42,360 --> 00:09:43,360 here is I'm 261 00:09:44,530 --> 00:09:47,039 I'm generating that code, 262 00:09:47,040 --> 00:09:49,139 which is like something like JavaScript. 263 00:09:50,250 --> 00:09:52,859 But I hate JavaScript as much as I hate 264 00:09:52,860 --> 00:09:53,860 videos. So 265 00:09:55,020 --> 00:09:56,040 I use that for this. 266 00:09:57,150 --> 00:09:59,519 And why isn't showing up? 267 00:09:59,520 --> 00:10:00,520 It's not cool. 268 00:10:02,270 --> 00:10:04,070 Hmm. Let's try this again. 269 00:10:05,550 --> 00:10:06,700 That doesn't work. 270 00:10:09,320 --> 00:10:11,719 Man, does that work well? 271 00:10:11,720 --> 00:10:12,720 Yes, I do. 272 00:10:13,250 --> 00:10:14,250 OK. 273 00:10:14,720 --> 00:10:16,999 I will just use 274 00:10:17,000 --> 00:10:18,000 the browser version. 275 00:10:19,160 --> 00:10:21,229 So this is this is where you can 276 00:10:21,230 --> 00:10:23,450 find the website online 277 00:10:25,040 --> 00:10:27,139 right now. I call it, I call it 278 00:10:27,140 --> 00:10:29,569 the beta because 279 00:10:29,570 --> 00:10:31,549 it has some bugs from time to time. 280 00:10:33,740 --> 00:10:34,740 Yeah. 281 00:10:36,470 --> 00:10:38,629 Yeah, it would be better in a minute like 282 00:10:38,630 --> 00:10:39,630 this. 283 00:10:41,210 --> 00:10:43,279 So just do this 284 00:10:43,280 --> 00:10:44,779 again, again 285 00:10:46,190 --> 00:10:47,299 and again. 286 00:10:47,300 --> 00:10:49,279 And so the way it works is generating the 287 00:10:49,280 --> 00:10:51,349 dot code and then on the server, 288 00:10:51,350 --> 00:10:52,729 it is compiling the article to 289 00:10:52,730 --> 00:10:54,739 JavaScript, which unfortunately it takes 290 00:10:54,740 --> 00:10:55,880 like three and a half seconds. 291 00:10:56,930 --> 00:10:59,089 There is not much I can do about this, 292 00:10:59,090 --> 00:11:01,759 but if you're using dashtam or dart, 293 00:11:01,760 --> 00:11:03,769 then the time, Oh, I know what the 294 00:11:03,770 --> 00:11:04,770 problem is. 295 00:11:07,160 --> 00:11:08,649 I just. Oh hmm. 296 00:11:11,080 --> 00:11:13,579 Anyway, so 297 00:11:13,580 --> 00:11:16,009 here you have a simulation and 298 00:11:16,010 --> 00:11:17,629 you can have some simple inputs. 299 00:11:17,630 --> 00:11:19,909 You know, like, for example, 300 00:11:19,910 --> 00:11:21,979 you know, this code was heading in 301 00:11:21,980 --> 00:11:24,229 B and obviously you have some 302 00:11:24,230 --> 00:11:26,659 inputs A and B here as well. 303 00:11:26,660 --> 00:11:28,879 And you can, you know, you can run 304 00:11:28,880 --> 00:11:31,039 it. And I can say, for example, 305 00:11:31,040 --> 00:11:33,379 five and I can say 306 00:11:33,380 --> 00:11:35,479 six and just see 307 00:11:35,480 --> 00:11:37,949 that the result is 11. 308 00:11:37,950 --> 00:11:40,039 And so, yeah, that is 309 00:11:40,040 --> 00:11:41,809 running in the browser. 310 00:11:41,810 --> 00:11:43,969 And if it's if it's running, 311 00:11:43,970 --> 00:11:46,039 the fun thing about running in 312 00:11:46,040 --> 00:11:47,509 the browser is that if you're using 313 00:11:47,510 --> 00:11:49,759 dodgem, which is which is like 314 00:11:49,760 --> 00:11:52,609 the dot version of Chrome, 315 00:11:52,610 --> 00:11:54,679 then it's actually just as fast 316 00:11:54,680 --> 00:11:56,859 as Isam from Sailing's. 317 00:11:56,860 --> 00:11:57,860 So. So 318 00:11:59,840 --> 00:12:01,340 although this has some funky. 319 00:12:02,420 --> 00:12:04,309 You can you can display a list. 320 00:12:06,710 --> 00:12:09,009 So let me let me do something. 321 00:12:11,090 --> 00:12:14,299 Although, for example, I want to make a 322 00:12:14,300 --> 00:12:16,459 look and let me make a 323 00:12:16,460 --> 00:12:18,049 counter and let some. 324 00:12:18,050 --> 00:12:20,119 Let's bring some of these because this 325 00:12:20,120 --> 00:12:21,989 is the first thing everyone does. 326 00:12:21,990 --> 00:12:24,229 And so what I'm saying here is I'm 327 00:12:24,230 --> 00:12:26,659 just. Instead of video you have 328 00:12:26,660 --> 00:12:28,459 you have like a process and you're saying 329 00:12:28,460 --> 00:12:30,499 if there is a rising edge, then do this 330 00:12:30,500 --> 00:12:31,500 as to that. 331 00:12:32,480 --> 00:12:34,669 And so on and in 332 00:12:34,670 --> 00:12:36,799 you just say this variable 333 00:12:36,800 --> 00:12:38,899 is going to be a register, which 334 00:12:39,920 --> 00:12:42,059 is clear and there's and 335 00:12:42,060 --> 00:12:44,839 there is also no way to describe it. 336 00:12:44,840 --> 00:12:46,909 And so those of you 337 00:12:46,910 --> 00:12:49,039 in positions or so for 338 00:12:49,040 --> 00:12:51,169 those of you that are suffering from 339 00:12:51,170 --> 00:12:52,849 from lectures in your design, 340 00:12:54,950 --> 00:12:58,189 you don't have those and feel 341 00:12:58,190 --> 00:13:00,439 and let's make it a you and 342 00:13:00,440 --> 00:13:02,749 and call it 70. 343 00:13:02,750 --> 00:13:04,999 But uh, but and 344 00:13:05,000 --> 00:13:06,770 let's say it's kind of +1. 345 00:13:07,790 --> 00:13:09,979 So what I described to you is basically 346 00:13:09,980 --> 00:13:12,469 a a 17 bit 347 00:13:12,470 --> 00:13:14,599 unsigned integer that is a counter that 348 00:13:14,600 --> 00:13:16,519 is incremented every time there's a 349 00:13:16,520 --> 00:13:17,520 rising edge. 350 00:13:18,380 --> 00:13:20,269 If you don't like the rising edge, you 351 00:13:20,270 --> 00:13:22,329 can specify like, I have to 352 00:13:22,330 --> 00:13:23,359 check the documentation. There's 353 00:13:23,360 --> 00:13:24,909 documentation button by you there. 354 00:13:26,510 --> 00:13:28,009 You can specify whatever you want. 355 00:13:28,010 --> 00:13:30,169 You can say, OK, look, it's equals 356 00:13:30,170 --> 00:13:31,589 falling. 357 00:13:31,590 --> 00:13:32,590 Um, 358 00:13:35,960 --> 00:13:38,479 like, uh, like 359 00:13:38,480 --> 00:13:40,220 this. Like, this is failing. 360 00:13:41,540 --> 00:13:43,639 And uh, but I 361 00:13:43,640 --> 00:13:44,599 don't like that too much. 362 00:13:44,600 --> 00:13:46,669 So the default configuration is that you 363 00:13:46,670 --> 00:13:49,189 have a rising edge and 364 00:13:49,190 --> 00:13:51,439 a synchronous resets, and those signals 365 00:13:51,440 --> 00:13:53,779 are automatically added to your design. 366 00:13:53,780 --> 00:13:56,029 And then we create an LCD 367 00:13:56,030 --> 00:13:58,189 and we say control and 368 00:13:58,190 --> 00:14:00,829 we take the No. 369 00:14:00,830 --> 00:14:02,689 This is a good process or we can take the 370 00:14:02,690 --> 00:14:04,889 settings. But if you're using Firefox, 371 00:14:04,890 --> 00:14:05,890 use eight. 372 00:14:10,880 --> 00:14:12,440 Four, oh, you can say 373 00:14:13,880 --> 00:14:15,379 the reasons why you you mean you could 374 00:14:15,380 --> 00:14:16,520 say reset value 375 00:14:18,260 --> 00:14:20,509 is five like this, 376 00:14:20,510 --> 00:14:22,879 but without the eye, but 377 00:14:22,880 --> 00:14:25,099 you look 378 00:14:25,100 --> 00:14:26,449 OK now. 379 00:14:26,450 --> 00:14:29,239 So we are taking the counter and 380 00:14:29,240 --> 00:14:32,419 we converted to Dot and JavaScript. 381 00:14:32,420 --> 00:14:34,789 And I really hope that you are not. 382 00:14:34,790 --> 00:14:36,470 Oh no, you're not perfect. 383 00:14:38,190 --> 00:14:40,579 So, oh, this is blinking very fast. 384 00:14:40,580 --> 00:14:42,379 Can I see it? Yes. 385 00:14:42,380 --> 00:14:44,449 So there you go. You're blinking it up in 386 00:14:44,450 --> 00:14:45,450 no time. 387 00:14:52,440 --> 00:14:53,909 And of course, you can compile it to a 388 00:14:53,910 --> 00:14:55,049 video and 389 00:14:56,100 --> 00:14:58,169 just see your quote here, it 390 00:14:58,170 --> 00:14:59,609 automatically generated the clock and 391 00:14:59,610 --> 00:15:02,129 resource research input for you. 392 00:15:02,130 --> 00:15:04,259 And by default, listing on 393 00:15:04,260 --> 00:15:06,359 the rising edge synchronous active high 394 00:15:06,360 --> 00:15:08,519 reset and 395 00:15:08,520 --> 00:15:10,139 initializing to zero. 396 00:15:11,280 --> 00:15:14,340 So let me get back to my slides. 397 00:15:17,230 --> 00:15:18,909 Well, my sister. 398 00:15:21,190 --> 00:15:23,439 So I hope that kind 399 00:15:23,440 --> 00:15:25,059 of convince you that, except for the 400 00:15:25,060 --> 00:15:27,219 Bucks, the brother is a very 401 00:15:27,220 --> 00:15:28,220 good idea. 402 00:15:28,810 --> 00:15:30,879 You can do simulation and you 403 00:15:30,880 --> 00:15:33,099 can even add some of 404 00:15:33,100 --> 00:15:34,139 your extensions, for example. 405 00:15:35,320 --> 00:15:36,519 Something that I would be interested in 406 00:15:36,520 --> 00:15:38,949 is have a couple of custom viz.. 407 00:15:38,950 --> 00:15:40,869 Instead of having just a blinking Aldi, 408 00:15:40,870 --> 00:15:43,029 have some of a 409 00:15:44,140 --> 00:15:45,909 Asians with like a CPU where you can see 410 00:15:45,910 --> 00:15:47,709 the registers in there and something like 411 00:15:47,710 --> 00:15:49,629 this because this is JavaScript, you can 412 00:15:49,630 --> 00:15:50,630 do like anything you want. 413 00:15:52,480 --> 00:15:54,759 But I also want to also 414 00:15:54,760 --> 00:15:56,949 want to create a new hardware platform 415 00:15:56,950 --> 00:15:59,109 because I think that, you know, if 416 00:15:59,110 --> 00:16:00,489 you're going to start anew with something 417 00:16:00,490 --> 00:16:02,409 you need to have or you need to have an 418 00:16:02,410 --> 00:16:05,289 FPGA, Avery can download data do. 419 00:16:05,290 --> 00:16:06,759 And it should be fun. 420 00:16:06,760 --> 00:16:08,289 You know, blinking ideas are always fun, 421 00:16:08,290 --> 00:16:10,059 especially if they AGP. 422 00:16:10,060 --> 00:16:11,950 And it should also be, you know, 423 00:16:13,000 --> 00:16:14,119 some kind of challenging. 424 00:16:14,120 --> 00:16:16,629 And so what I created is, like 425 00:16:16,630 --> 00:16:18,249 this piece here, I'm going to hang it 426 00:16:18,250 --> 00:16:20,289 like here and. 427 00:16:23,400 --> 00:16:26,519 Tara, are blinking, hopefully, is it? 428 00:16:26,520 --> 00:16:27,520 Yes. 429 00:16:27,900 --> 00:16:30,119 We need research 430 00:16:30,120 --> 00:16:31,499 like this. 431 00:16:31,500 --> 00:16:32,500 Well, this is good. 432 00:16:33,420 --> 00:16:34,379 I want to have this. 433 00:16:34,380 --> 00:16:36,779 So there you have your blinking 434 00:16:36,780 --> 00:16:38,159 algae is also making a good Christmas 435 00:16:38,160 --> 00:16:39,160 tree. 436 00:16:40,290 --> 00:16:41,459 So I wanted to have a really simple 437 00:16:41,460 --> 00:16:43,439 design, and this was the first one that 438 00:16:43,440 --> 00:16:45,329 was done by both port. 439 00:16:45,330 --> 00:16:47,189 He was making beautiful pieces, but 440 00:16:47,190 --> 00:16:49,019 unfortunately it didn't work out because 441 00:16:49,020 --> 00:16:52,019 his software is using Inkscape for 442 00:16:52,020 --> 00:16:54,089 designing all the the bolts. 443 00:16:54,090 --> 00:16:56,219 And then it's compiling together 444 00:16:56,220 --> 00:16:57,659 with wood with Python. 445 00:16:59,190 --> 00:17:01,439 So if you're if you're interested 446 00:17:01,440 --> 00:17:03,509 in in other ways of creating 447 00:17:03,510 --> 00:17:05,459 PCBs, then you should definitely take a 448 00:17:05,460 --> 00:17:06,460 look at this. 449 00:17:07,170 --> 00:17:09,328 But it doesn't support for us, so 450 00:17:09,329 --> 00:17:11,759 we couldn't use it for the the board. 451 00:17:11,760 --> 00:17:13,769 So this is the basically the board that 452 00:17:13,770 --> 00:17:15,209 we created. 453 00:17:15,210 --> 00:17:17,729 There are like forums and 454 00:17:17,730 --> 00:17:19,679 on this forums, stories on each there is 455 00:17:19,680 --> 00:17:21,539 like four biology so that you can blink 456 00:17:21,540 --> 00:17:24,269 and all kind of different colors. 457 00:17:24,270 --> 00:17:26,068 And the funny thing is that you can 458 00:17:26,069 --> 00:17:27,449 actually stack two of those, both 459 00:17:27,450 --> 00:17:29,669 together in 45 degree angle, 460 00:17:29,670 --> 00:17:32,639 so you can vertically stack them 461 00:17:32,640 --> 00:17:34,829 and you can horizontally stick them 462 00:17:34,830 --> 00:17:36,899 together to create kind of network. 463 00:17:36,900 --> 00:17:39,089 So, for example, you can recreate simple 464 00:17:39,090 --> 00:17:41,009 games where you can, you know, you push a 465 00:17:41,010 --> 00:17:42,869 button on one and then it's traveling 466 00:17:42,870 --> 00:17:45,210 across the arms to 467 00:17:46,290 --> 00:17:48,029 the signals, traveling across the arms to 468 00:17:48,030 --> 00:17:50,309 other FPGA bots do something 469 00:17:50,310 --> 00:17:52,559 like this. So I wanted to really 470 00:17:52,560 --> 00:17:54,629 give the opportunity to to have some 471 00:17:54,630 --> 00:17:57,059 fun with the bots without doing actually 472 00:17:57,060 --> 00:17:58,060 some some useful. 473 00:18:00,960 --> 00:18:03,149 Yeah. Realized losses, but by SMB 474 00:18:03,150 --> 00:18:05,879 technologies is a good friend of mine, 475 00:18:05,880 --> 00:18:08,129 and he put really a lot of effort 476 00:18:08,130 --> 00:18:10,469 into designing the bot and rehearsal 477 00:18:10,470 --> 00:18:12,359 time. So I want to thank him here. 478 00:18:13,530 --> 00:18:16,089 And so the platform, that's an 479 00:18:16,090 --> 00:18:18,150 actual 250. 480 00:18:20,370 --> 00:18:23,159 Yeah, you can read about it. 481 00:18:23,160 --> 00:18:25,379 It's programed from an angle, which is 482 00:18:25,380 --> 00:18:26,609 kind of interesting. 483 00:18:26,610 --> 00:18:27,749 You have some space on there. 484 00:18:27,750 --> 00:18:30,109 So if you want to put some data 485 00:18:30,110 --> 00:18:32,309 to from the make out to 486 00:18:32,310 --> 00:18:34,020 the actual, you can do that as well. 487 00:18:35,040 --> 00:18:36,359 And yeah, it does. 488 00:18:36,360 --> 00:18:38,939 You have like 60 miles that you can 489 00:18:38,940 --> 00:18:40,889 access from the headers and there are 490 00:18:40,890 --> 00:18:43,439 like four parts which you can see the the 491 00:18:43,440 --> 00:18:45,449 the four arms and there are two vertical 492 00:18:45,450 --> 00:18:47,459 ports and five. 493 00:18:47,460 --> 00:18:49,249 I always go to the X. 494 00:18:49,250 --> 00:18:52,109 We you can do a spy for 495 00:18:52,110 --> 00:18:54,449 from the from your PC 496 00:18:54,450 --> 00:18:56,399 to it and you have some push buttons. 497 00:18:56,400 --> 00:18:58,529 And yeah, and the 498 00:18:58,530 --> 00:19:00,689 bot, the default arm has like four 499 00:19:00,690 --> 00:19:03,239 edge abilities and the pin has 500 00:19:03,240 --> 00:19:04,739 two connectors. 501 00:19:04,740 --> 00:19:07,049 And so the thing is, 502 00:19:07,050 --> 00:19:09,159 I want to I want to sell 503 00:19:09,160 --> 00:19:10,499 it for, like, really cheap. So if you're 504 00:19:10,500 --> 00:19:12,180 interested in having something like this, 505 00:19:13,260 --> 00:19:14,399 it should be around. 506 00:19:14,400 --> 00:19:16,109 So use and the more people that have 507 00:19:16,110 --> 00:19:18,809 very, you know, so the experience and 508 00:19:18,810 --> 00:19:20,399 the more people are interested in, the 509 00:19:20,400 --> 00:19:22,289 more I can go. 510 00:19:22,290 --> 00:19:24,879 I can make X go near zero. 511 00:19:24,880 --> 00:19:25,880 So. 512 00:19:26,910 --> 00:19:27,910 Yeah. 513 00:19:30,130 --> 00:19:31,399 That would be that would be that would be 514 00:19:31,400 --> 00:19:33,079 really awesome if I could reach twenty 515 00:19:33,080 --> 00:19:34,159 nine. 516 00:19:34,160 --> 00:19:36,079 This is what I wanted to say with a 517 00:19:36,080 --> 00:19:36,979 straight line. 518 00:19:36,980 --> 00:19:38,749 Yeah, no. 519 00:19:40,050 --> 00:19:42,229 Um, so 520 00:19:42,230 --> 00:19:44,569 but this is not 521 00:19:44,570 --> 00:19:46,069 all I want to show. 522 00:19:48,650 --> 00:19:50,779 So, OK, now you 523 00:19:50,780 --> 00:19:52,819 wrote your really nice program. 524 00:19:52,820 --> 00:19:55,249 And you obviously 525 00:19:55,250 --> 00:19:57,230 want to get it running on your 526 00:19:59,030 --> 00:20:01,189 on your FPGA and the zingers 527 00:20:01,190 --> 00:20:03,359 that I'm using 528 00:20:03,360 --> 00:20:06,019 to make and I'm not ashamed of it. 529 00:20:06,020 --> 00:20:08,149 But the it's 530 00:20:08,150 --> 00:20:10,189 not it's not like any a window actually 531 00:20:10,190 --> 00:20:12,799 supports macOS X 532 00:20:12,800 --> 00:20:14,809 with their tools, which I think is, like, 533 00:20:14,810 --> 00:20:16,249 really a shame. 534 00:20:16,250 --> 00:20:17,250 And 535 00:20:18,710 --> 00:20:20,809 so what I did is, you 536 00:20:20,810 --> 00:20:23,209 know, you can actually program your FPGA 537 00:20:23,210 --> 00:20:24,210 from the web. You are 538 00:20:25,820 --> 00:20:27,290 like, Oh, how does it look? 539 00:20:32,390 --> 00:20:34,489 OK, so the magic trick 540 00:20:34,490 --> 00:20:35,490 I'm pulling here is 541 00:20:36,800 --> 00:20:39,459 the troops are still running on 542 00:20:39,460 --> 00:20:40,969 on some Windows or 543 00:20:42,140 --> 00:20:43,609 Linux servers or in the background, 544 00:20:43,610 --> 00:20:45,679 there's my Windows 545 00:20:45,680 --> 00:20:48,049 and there is this there is a tool called 546 00:20:48,050 --> 00:20:50,119 local Hip-Hop, which is pulling all 547 00:20:50,120 --> 00:20:51,559 the modifications that you're doing. 548 00:20:51,560 --> 00:20:54,259 And the buck I had yesterday is fixed. 549 00:20:54,260 --> 00:20:56,569 It's pulling all the modifications from 550 00:20:56,570 --> 00:20:58,789 the they're doing to your workspace until 551 00:20:58,790 --> 00:21:00,019 the local disk. 552 00:21:00,020 --> 00:21:02,089 And when I'm calling 553 00:21:03,200 --> 00:21:05,269 synthesis from from 554 00:21:05,270 --> 00:21:07,399 the web interface, actually what it is 555 00:21:07,400 --> 00:21:09,589 doing is, oh, the 556 00:21:09,590 --> 00:21:11,209 speaker before me forgot his phone, 557 00:21:12,470 --> 00:21:13,749 I would just move. 558 00:21:13,750 --> 00:21:15,059 He was called. 559 00:21:15,060 --> 00:21:16,060 Probably wasn't important. 560 00:21:17,600 --> 00:21:19,759 Well, you know, there it 561 00:21:19,760 --> 00:21:20,760 is. 562 00:21:22,640 --> 00:21:25,139 Thanks for taking the time because 563 00:21:25,140 --> 00:21:27,199 it takes a long time for the synthesis to 564 00:21:27,200 --> 00:21:28,200 run through. 565 00:21:32,270 --> 00:21:34,429 OK, so so what 566 00:21:34,430 --> 00:21:36,739 this is doing is you're 567 00:21:36,740 --> 00:21:39,169 compiling your code to video 568 00:21:39,170 --> 00:21:41,329 and the local airport 569 00:21:41,330 --> 00:21:43,489 is pulling down the video files. 570 00:21:43,490 --> 00:21:45,109 It is in general. 571 00:21:45,110 --> 00:21:46,939 It is then generating all the other files 572 00:21:46,940 --> 00:21:49,369 that it needs, like a project file and 573 00:21:49,370 --> 00:21:52,009 the pin constraint file. 574 00:21:52,010 --> 00:21:54,109 And then it is calling the 575 00:21:54,110 --> 00:21:55,339 synthesis tool. 576 00:21:55,340 --> 00:21:57,679 And once it is done with it, 577 00:21:57,680 --> 00:22:00,319 it uploads the resulting 578 00:22:00,320 --> 00:22:03,169 dot dot file in this case, 579 00:22:03,170 --> 00:22:04,940 back to the server and 580 00:22:06,200 --> 00:22:07,200 then 581 00:22:08,890 --> 00:22:10,279 I need just for some time. 582 00:22:12,600 --> 00:22:14,719 Yeah, unfortunately, this is 583 00:22:14,720 --> 00:22:16,339 looking slower than it was in 584 00:22:17,540 --> 00:22:19,459 at home because it's using some of the 585 00:22:19,460 --> 00:22:20,359 others. 586 00:22:20,360 --> 00:22:22,189 So, yeah, you can. 587 00:22:22,190 --> 00:22:24,460 You can look at the look will. 588 00:22:27,050 --> 00:22:28,949 You can look at the the output that 589 00:22:28,950 --> 00:22:31,129 generated, you know, what's 590 00:22:31,130 --> 00:22:33,409 what resources it took, and 591 00:22:33,410 --> 00:22:34,849 you can take a look at the look at log 592 00:22:34,850 --> 00:22:36,350 fire if you're interested in that. 593 00:22:38,090 --> 00:22:39,679 You know, it looks like this. 594 00:22:39,680 --> 00:22:41,569 It says something strange, like I'm 595 00:22:41,570 --> 00:22:43,759 quoting here, but this is not very 596 00:22:43,760 --> 00:22:46,009 user friendly and I have to I have to 597 00:22:46,010 --> 00:22:47,329 find some ways to 598 00:22:48,470 --> 00:22:50,389 make some sense out of that to really 599 00:22:50,390 --> 00:22:52,399 give back the errors that are generated 600 00:22:52,400 --> 00:22:54,739 during synthesis, which may occur 601 00:22:54,740 --> 00:22:57,019 because and because I cannot detect 602 00:22:57,020 --> 00:22:58,639 them. Because if you, for example, if you 603 00:22:58,640 --> 00:23:01,249 do something useless and and 604 00:23:01,250 --> 00:23:03,319 the truth figures it out and optimize it 605 00:23:03,320 --> 00:23:05,089 away and Wednesday's events, when it 606 00:23:05,090 --> 00:23:07,289 optimizes something away, then 607 00:23:07,290 --> 00:23:09,109 it will give you a warning. 608 00:23:09,110 --> 00:23:11,119 And yeah, and so on. 609 00:23:11,120 --> 00:23:13,249 So and there is 610 00:23:13,250 --> 00:23:14,420 a second local help out 611 00:23:15,800 --> 00:23:17,299 there have a really nice grid for it 612 00:23:17,300 --> 00:23:19,249 already. Not, not really nice, but nice. 613 00:23:20,600 --> 00:23:22,939 And this one knows 614 00:23:22,940 --> 00:23:25,129 that there is this port 615 00:23:25,130 --> 00:23:27,589 attached to left to 616 00:23:27,590 --> 00:23:30,889 see you would be modem and 617 00:23:30,890 --> 00:23:32,180 what I can do, you know, 618 00:23:33,350 --> 00:23:34,699 I can program it. 619 00:23:34,700 --> 00:23:35,750 I can start the program. 620 00:23:37,160 --> 00:23:39,379 I can tell it to download the exact 621 00:23:39,380 --> 00:23:40,970 configuration that file 622 00:23:42,140 --> 00:23:43,459 down to the FPGA. 623 00:23:43,460 --> 00:23:45,709 And there might be 624 00:23:45,710 --> 00:23:48,049 some change happening to 625 00:23:48,050 --> 00:23:49,819 the blinking stair. 626 00:23:49,820 --> 00:23:51,679 Maybe I forgot if I change something, if 627 00:23:51,680 --> 00:23:53,930 I change something, but it was. 628 00:23:55,560 --> 00:23:56,819 What does the court actually say? 629 00:23:58,620 --> 00:23:59,880 Yeah, OK. It's uh. 630 00:24:01,950 --> 00:24:03,179 Did I change something? 631 00:24:03,180 --> 00:24:04,979 Oh no, it's it's the same program, so you 632 00:24:04,980 --> 00:24:05,980 won't see anything? 633 00:24:09,330 --> 00:24:10,559 Not really. 634 00:24:10,560 --> 00:24:11,759 OK. This doesn't make a difference. 635 00:24:11,760 --> 00:24:13,109 So let's. 636 00:24:15,660 --> 00:24:17,969 Let's leave 637 00:24:17,970 --> 00:24:18,289 it 638 00:24:18,290 --> 00:24:19,289 there. Yeah. 639 00:24:19,290 --> 00:24:21,299 This is because the reset button is not 640 00:24:21,300 --> 00:24:22,589 working, probably. 641 00:24:22,590 --> 00:24:24,119 Probably right now. 642 00:24:24,120 --> 00:24:25,120 Not at all. 643 00:24:28,620 --> 00:24:30,789 Well, it's my 644 00:24:30,790 --> 00:24:31,950 to my defense. I have to say that 645 00:24:33,720 --> 00:24:35,459 what I'm going to show you here is like 646 00:24:35,460 --> 00:24:37,289 really cutting edge and cutting edge. 647 00:24:37,290 --> 00:24:39,239 I mean, I just finished it like last 648 00:24:39,240 --> 00:24:40,240 week, and 649 00:24:42,150 --> 00:24:44,429 let's read with all the stuff again. 650 00:24:44,430 --> 00:24:46,589 But in the meantime, maybe I should 651 00:24:46,590 --> 00:24:48,599 do something else or it's just a minute. 652 00:24:48,600 --> 00:24:50,519 Hmm. Oh no, I can. 653 00:24:50,520 --> 00:24:52,199 Hmm. No, I will continue with our 654 00:24:52,200 --> 00:24:54,240 presentation and 655 00:24:55,680 --> 00:24:57,209 just wait a second. 656 00:24:57,210 --> 00:24:59,399 So you 657 00:24:59,400 --> 00:25:01,499 may think that, you know, this is like a 658 00:25:01,500 --> 00:25:03,150 really nice toy for the little kids, 659 00:25:04,290 --> 00:25:06,030 but it also has 660 00:25:07,380 --> 00:25:08,999 some features that I think are really 661 00:25:09,000 --> 00:25:11,999 interesting for for people that are doing 662 00:25:12,000 --> 00:25:14,129 serious work with us. 663 00:25:14,130 --> 00:25:16,199 So for example, if you're into, 664 00:25:16,200 --> 00:25:18,599 um, into 665 00:25:18,600 --> 00:25:20,669 image processing, then you 666 00:25:20,670 --> 00:25:22,319 always have the problem that you have to 667 00:25:22,320 --> 00:25:23,819 have big data that you want to run 668 00:25:23,820 --> 00:25:25,609 through your design to 669 00:25:26,690 --> 00:25:28,769 to verify that it's working as 670 00:25:28,770 --> 00:25:29,770 expected. 671 00:25:30,510 --> 00:25:32,759 So let me just 672 00:25:32,760 --> 00:25:34,319 quickly know it's not about 673 00:25:36,270 --> 00:25:37,289 me. 674 00:25:37,290 --> 00:25:38,290 Come on. 675 00:25:39,660 --> 00:25:40,649 Yeah, so. 676 00:25:40,650 --> 00:25:42,899 And what that tells you is that 677 00:25:42,900 --> 00:25:45,189 you can you can transform 678 00:25:45,190 --> 00:25:47,309 HBO to 679 00:25:47,310 --> 00:25:50,009 to a language like C, C++, Java 680 00:25:50,010 --> 00:25:51,539 and Dot. 681 00:25:51,540 --> 00:25:53,279 And you know, those are sequential 682 00:25:53,280 --> 00:25:54,419 languages, you know? 683 00:25:54,420 --> 00:25:57,089 And but it shows the power of language. 684 00:25:57,090 --> 00:25:59,399 So this is 685 00:25:59,400 --> 00:26:01,829 really fast, like, really, really, 686 00:26:01,830 --> 00:26:03,569 really fast. I think, you know, it's 687 00:26:03,570 --> 00:26:05,189 probably faster simulator that you can 688 00:26:05,190 --> 00:26:06,599 get right now on the market. 689 00:26:08,520 --> 00:26:11,309 It's also generating some neutral 690 00:26:11,310 --> 00:26:13,379 platform neutral bytecode. 691 00:26:13,380 --> 00:26:15,449 So there is a virtual machine, 692 00:26:15,450 --> 00:26:17,759 and you can hook in to that by creating 693 00:26:17,760 --> 00:26:19,469 an interpreter if you're into and do 694 00:26:19,470 --> 00:26:20,669 that. 695 00:26:20,670 --> 00:26:22,889 And also, you can bet some 696 00:26:22,890 --> 00:26:24,180 domain specific languages, 697 00:26:25,470 --> 00:26:27,599 which I think is a really cool thing. 698 00:26:27,600 --> 00:26:29,549 But before I continue here, this should 699 00:26:29,550 --> 00:26:30,689 be done here. 700 00:26:30,690 --> 00:26:32,790 OK, so let me reconfigure this. 701 00:26:35,880 --> 00:26:38,039 And yeah, so 702 00:26:38,040 --> 00:26:40,169 the way it works is, do you have your 703 00:26:40,170 --> 00:26:41,189 HDL code? 704 00:26:41,190 --> 00:26:43,440 And from that, I'm driving an HDL model, 705 00:26:44,460 --> 00:26:46,679 which is process oriented and so I can 706 00:26:46,680 --> 00:26:48,389 output video code. 707 00:26:48,390 --> 00:26:50,549 So the piece of code 708 00:26:50,550 --> 00:26:53,159 and the code there are like 709 00:26:53,160 --> 00:26:54,929 they kind of look alike, but you know, 710 00:26:54,930 --> 00:26:57,479 the show does 711 00:26:57,480 --> 00:26:59,579 consume significantly as lines of code. 712 00:27:01,530 --> 00:27:03,569 And from that, I'm generating a 713 00:27:03,570 --> 00:27:05,369 sequential model, which you can then 714 00:27:05,370 --> 00:27:07,589 output to the byte code and run 715 00:27:07,590 --> 00:27:08,819 it through an interpreter. Or you can 716 00:27:08,820 --> 00:27:11,069 directly generate native 717 00:27:11,070 --> 00:27:12,990 code like Java Dot or whatever. 718 00:27:14,620 --> 00:27:15,620 Not let me. 719 00:27:16,910 --> 00:27:19,130 Did its research? 720 00:27:21,830 --> 00:27:23,989 Oh, yeah. Much smoother. 721 00:27:23,990 --> 00:27:26,119 So, no, it's you know, I wanted to 722 00:27:26,120 --> 00:27:28,319 show you that you can I. 723 00:27:28,320 --> 00:27:30,949 I slow down the speeds and now it's 724 00:27:30,950 --> 00:27:33,139 fading across the colors much more 725 00:27:33,140 --> 00:27:34,609 smoothly. 726 00:27:34,610 --> 00:27:35,610 So, yeah. 727 00:27:39,490 --> 00:27:41,679 Yeah, so how far is the simulation so 728 00:27:41,680 --> 00:27:43,839 notice that this is a logarithmic 729 00:27:43,840 --> 00:27:44,840 scale? 730 00:27:45,730 --> 00:27:47,859 Crystal Zoom is like the fastest 731 00:27:47,860 --> 00:27:49,959 HDL simulator that is commercially 732 00:27:49,960 --> 00:27:50,919 available. 733 00:27:50,920 --> 00:27:53,619 Isom, which is like the Queen 734 00:27:53,620 --> 00:27:56,199 one is it's like the 735 00:27:56,200 --> 00:27:57,669 the free tool that you're getting this 736 00:27:57,670 --> 00:28:00,069 exciting and 737 00:28:00,070 --> 00:28:02,199 the dark blue bar 738 00:28:02,200 --> 00:28:04,569 that you can see is screwed 739 00:28:04,570 --> 00:28:06,519 generated from steel. 740 00:28:06,520 --> 00:28:09,099 And you can see that between crystals 741 00:28:09,100 --> 00:28:11,199 and to each of those two orders of 742 00:28:11,200 --> 00:28:13,359 magnitude in between and 743 00:28:13,360 --> 00:28:14,769 between Isom. 744 00:28:14,770 --> 00:28:16,959 And actually there are also 745 00:28:16,960 --> 00:28:18,939 three orders of magnitude. 746 00:28:18,940 --> 00:28:20,979 So I think this is pretty darn 747 00:28:20,980 --> 00:28:21,980 impressive. 748 00:28:22,900 --> 00:28:23,919 Hmm. 749 00:28:23,920 --> 00:28:26,409 So the way it works and 750 00:28:26,410 --> 00:28:27,879 when you're doing surveys which show 751 00:28:27,880 --> 00:28:30,729 simulation is like you're 752 00:28:30,730 --> 00:28:33,279 you're having your model, 753 00:28:33,280 --> 00:28:35,439 for example, you want to create an MP 754 00:28:35,440 --> 00:28:37,749 for compression 755 00:28:37,750 --> 00:28:39,839 algorithm and you're 756 00:28:39,840 --> 00:28:41,289 you have a reference implementation and 757 00:28:41,290 --> 00:28:43,419 see and you're generating some 758 00:28:43,420 --> 00:28:45,819 data and you fit that into your 759 00:28:45,820 --> 00:28:48,729 test bench, which then is executed by 760 00:28:48,730 --> 00:28:50,499 some tool like isam crystals and or 761 00:28:50,500 --> 00:28:52,299 whatever. And you get some output data 762 00:28:52,300 --> 00:28:53,769 and then you compare those two in your 763 00:28:55,060 --> 00:28:57,459 and you hope that those are the same. 764 00:28:57,460 --> 00:28:59,529 But and you 765 00:28:59,530 --> 00:29:01,929 can actually embed your generated 766 00:29:01,930 --> 00:29:04,479 native code into your application. 767 00:29:04,480 --> 00:29:05,480 And 768 00:29:07,210 --> 00:29:09,009 let me give you a quick demo of this. 769 00:29:10,660 --> 00:29:11,959 So one of the examples that 770 00:29:13,010 --> 00:29:14,109 that it had 771 00:29:15,160 --> 00:29:17,469 was that, for example, I wanted to 772 00:29:17,470 --> 00:29:19,659 to develop a camera IP 773 00:29:19,660 --> 00:29:22,149 call that is scaling down 774 00:29:22,150 --> 00:29:23,619 the image from a camera. 775 00:29:23,620 --> 00:29:25,759 The results are two thousand forty 776 00:29:25,760 --> 00:29:28,299 2048 by two thousand forty eight pictures 777 00:29:28,300 --> 00:29:30,479 that are coming in via, isn't it? 778 00:29:30,480 --> 00:29:31,999 Um, right now there's the camera 779 00:29:32,000 --> 00:29:34,749 attached, so I use a still image, 780 00:29:34,750 --> 00:29:36,909 but those are two thousand four forty 781 00:29:36,910 --> 00:29:39,159 eight by 2048 pixels 782 00:29:39,160 --> 00:29:42,219 and I'm scaling those down 783 00:29:42,220 --> 00:29:44,649 by by some time. 784 00:29:44,650 --> 00:29:46,749 Um, and the 785 00:29:46,750 --> 00:29:49,179 what what you could see here when I was 786 00:29:49,180 --> 00:29:51,909 checking DBA is that the 787 00:29:51,910 --> 00:29:54,039 call was was 788 00:29:54,040 --> 00:29:56,709 computing the downscaled version. 789 00:29:56,710 --> 00:29:58,869 And if 790 00:29:58,870 --> 00:30:00,400 you would run through this through 791 00:30:01,450 --> 00:30:03,729 through Isam, then it would have taken 792 00:30:03,730 --> 00:30:06,579 like a 793 00:30:06,580 --> 00:30:07,579 much longer. 794 00:30:07,580 --> 00:30:10,299 Um yeah, like a few, 795 00:30:10,300 --> 00:30:13,069 like tens of seconds to 796 00:30:13,070 --> 00:30:14,950 to do to scale this image, 797 00:30:16,450 --> 00:30:18,909 but then you can do it like 798 00:30:18,910 --> 00:30:20,229 instantaneous. 799 00:30:20,230 --> 00:30:22,329 But what's even more neat, I 800 00:30:22,330 --> 00:30:23,889 find, is, for example, the the image 801 00:30:23,890 --> 00:30:25,389 looks a bit bright. 802 00:30:25,390 --> 00:30:28,299 So if I change some code here, 803 00:30:28,300 --> 00:30:30,549 then recompiled suppose 804 00:30:30,550 --> 00:30:32,199 if you looked at the Java code loads 805 00:30:32,200 --> 00:30:34,869 during the runtime and 806 00:30:34,870 --> 00:30:37,089 updates, the image was the new piece 807 00:30:37,090 --> 00:30:38,109 of code. 808 00:30:38,110 --> 00:30:40,719 And so you can finally, 809 00:30:40,720 --> 00:30:43,089 you can start, you can start 810 00:30:43,090 --> 00:30:45,199 developing hardware 811 00:30:45,200 --> 00:30:47,769 like you're used to develop software 812 00:30:47,770 --> 00:30:49,249 by trying error. 813 00:30:49,250 --> 00:30:50,250 Um. 814 00:31:00,080 --> 00:31:02,329 So this is really a significant 815 00:31:02,330 --> 00:31:04,549 speed up that you can achieve here, 816 00:31:04,550 --> 00:31:05,900 and I also think that 817 00:31:07,700 --> 00:31:09,829 it's quite quite nice to use 818 00:31:12,410 --> 00:31:13,999 another interesting feature. 819 00:31:15,610 --> 00:31:16,610 And 820 00:31:18,080 --> 00:31:19,130 one of the when I'm 821 00:31:20,420 --> 00:31:23,239 when I'm working on our rover, we have 822 00:31:23,240 --> 00:31:25,609 we have a board where there's a 823 00:31:25,610 --> 00:31:27,799 power PC embedded into the FPGA. 824 00:31:27,800 --> 00:31:30,019 And so we have always the problem 825 00:31:30,020 --> 00:31:32,129 that we need to attach some 826 00:31:32,130 --> 00:31:34,669 some IP code to the CPU 827 00:31:34,670 --> 00:31:36,949 and we need, for example, a modulator 828 00:31:36,950 --> 00:31:39,019 for the pulse was modulation of the 829 00:31:39,020 --> 00:31:41,179 motors, and we need to attach that to 830 00:31:41,180 --> 00:31:43,279 the CPU and 831 00:31:43,280 --> 00:31:44,599 how this usually works as you are 832 00:31:44,600 --> 00:31:46,069 clicking and clicking and clicking and 833 00:31:46,070 --> 00:31:47,329 editing and figuring and editing. 834 00:31:48,530 --> 00:31:50,539 But in peace issue, there is something 835 00:31:50,540 --> 00:31:52,789 much neater, too much 836 00:31:52,790 --> 00:31:54,409 nicer way to do it. 837 00:31:54,410 --> 00:31:55,730 And this is by 838 00:31:57,140 --> 00:31:58,729 embedding another language. 839 00:31:58,730 --> 00:32:00,829 So in this issue, you can say I want 840 00:32:00,830 --> 00:32:02,269 to define my own language 841 00:32:03,470 --> 00:32:05,809 and what you can see between 842 00:32:05,810 --> 00:32:07,969 the what is the code 843 00:32:07,970 --> 00:32:10,279 behind to generate plb? 844 00:32:10,280 --> 00:32:11,869 And before the closing bracket of it, 845 00:32:11,870 --> 00:32:14,899 this is a language is a configuration 846 00:32:14,900 --> 00:32:17,359 language where I'm describing 847 00:32:17,360 --> 00:32:19,099 a memory layout. 848 00:32:19,100 --> 00:32:20,779 The one that you can see on the right 849 00:32:20,780 --> 00:32:23,359 where you have like it's 850 00:32:23,360 --> 00:32:24,619 offset zero in the memory. 851 00:32:24,620 --> 00:32:26,899 You have like a register either and 852 00:32:26,900 --> 00:32:28,849 bizarro and offset four. 853 00:32:28,850 --> 00:32:31,189 You have the results. 854 00:32:31,190 --> 00:32:32,899 And actually, the only lines that you 855 00:32:32,900 --> 00:32:35,179 care about are are 856 00:32:35,180 --> 00:32:37,459 the three lines at the bottom, 857 00:32:37,460 --> 00:32:39,469 which is where you are. 858 00:32:39,470 --> 00:32:41,759 Your function is because it's aging. 859 00:32:41,760 --> 00:32:43,879 It's adding a plus b and 860 00:32:43,880 --> 00:32:46,129 putting it to results 861 00:32:46,130 --> 00:32:47,609 from a CPU perspective. 862 00:32:47,610 --> 00:32:50,359 You could you write your data to 863 00:32:50,360 --> 00:32:52,549 offset zero and you read it back from 864 00:32:52,550 --> 00:32:53,550 from four. 865 00:32:55,250 --> 00:32:57,589 And what it does is 866 00:32:57,590 --> 00:32:59,359 it not just generates you all the 867 00:32:59,360 --> 00:33:00,549 infrastructure code that you need, 868 00:33:00,550 --> 00:33:02,509 there's an empty file. 869 00:33:02,510 --> 00:33:03,589 If I 870 00:33:05,240 --> 00:33:07,219 was, there's many files that are 871 00:33:07,220 --> 00:33:08,220 generated by it 872 00:33:09,410 --> 00:33:11,479 and it's generating all of that for 873 00:33:11,480 --> 00:33:12,589 you. 874 00:33:12,590 --> 00:33:14,659 And yeah, it's 875 00:33:14,660 --> 00:33:16,759 generating your file 876 00:33:16,760 --> 00:33:18,529 where you can see where your memory stuff 877 00:33:18,530 --> 00:33:19,459 is. 878 00:33:19,460 --> 00:33:21,559 And it's also generating you some, 879 00:33:21,560 --> 00:33:23,239 some C code. 880 00:33:23,240 --> 00:33:25,399 And the funny thing is, if 881 00:33:25,400 --> 00:33:27,469 you're using this, if you're using the 882 00:33:27,470 --> 00:33:29,729 C code, did that really put a demo 883 00:33:29,730 --> 00:33:32,269 in a way? 884 00:33:32,270 --> 00:33:33,800 Oh, OK. I have to do that. 885 00:33:37,490 --> 00:33:38,490 I'm a bit afraid 886 00:33:40,760 --> 00:33:42,949 I will do 887 00:33:42,950 --> 00:33:43,950 something different. 888 00:33:47,470 --> 00:33:48,619 Know this is hard. 889 00:33:48,620 --> 00:33:49,620 OK. 890 00:33:49,970 --> 00:33:53,029 So let's take a look at the example. 891 00:33:53,030 --> 00:33:55,229 And here's an example 892 00:33:55,230 --> 00:33:56,839 of that. No, this is not. 893 00:33:56,840 --> 00:33:59,059 Here's an example that 894 00:33:59,060 --> 00:34:00,209 I was showing you. 895 00:34:00,210 --> 00:34:02,539 Um, let me just remove 896 00:34:02,540 --> 00:34:03,540 that. 897 00:34:06,930 --> 00:34:07,930 Let's give it a name 898 00:34:11,070 --> 00:34:13,408 and put this into full screen 899 00:34:13,409 --> 00:34:15,178 so you can see something. 900 00:34:15,179 --> 00:34:17,759 And let's compile this, 901 00:34:17,760 --> 00:34:19,859 and what you can see is, 902 00:34:19,860 --> 00:34:21,749 you know, it's generating this is the 903 00:34:21,750 --> 00:34:23,189 video called, by the way that it 904 00:34:23,190 --> 00:34:24,629 generates. 905 00:34:24,630 --> 00:34:26,698 This is the bus decode logic that 906 00:34:26,699 --> 00:34:27,699 you need to 907 00:34:28,909 --> 00:34:31,529 to access the register from a CPU 908 00:34:31,530 --> 00:34:33,388 in video. 909 00:34:33,389 --> 00:34:35,459 And it goes on and goes on, 910 00:34:35,460 --> 00:34:36,689 goes on. You know, it's like one of the 911 00:34:36,690 --> 00:34:38,399 sixty five lines of code. 912 00:34:38,400 --> 00:34:41,249 And that's not all you need 913 00:34:41,250 --> 00:34:44,269 another video five, which is like, 914 00:34:44,270 --> 00:34:46,408 uh, 400 to two lines 915 00:34:46,409 --> 00:34:49,079 as well, and 916 00:34:49,080 --> 00:34:51,178 is also generating some strange 917 00:34:51,179 --> 00:34:52,619 files like the MPD file 918 00:34:53,760 --> 00:34:56,069 and the purifier. 919 00:34:56,070 --> 00:34:59,339 All those files you need to 920 00:34:59,340 --> 00:35:01,979 to program actually the 921 00:35:01,980 --> 00:35:04,079 UM, the 922 00:35:04,080 --> 00:35:06,629 IP core into your design 923 00:35:06,630 --> 00:35:07,899 and what it shows. 924 00:35:07,900 --> 00:35:10,229 What's generating for you is those 925 00:35:10,230 --> 00:35:12,569 what I just showed you that 926 00:35:12,570 --> 00:35:14,979 the HDMI l file 927 00:35:14,980 --> 00:35:17,759 that you can see where all the stuff is. 928 00:35:17,760 --> 00:35:19,919 And some some 929 00:35:19,920 --> 00:35:23,709 helper methods very can 930 00:35:23,710 --> 00:35:26,189 get head of files 931 00:35:26,190 --> 00:35:28,439 for calling such input 932 00:35:28,440 --> 00:35:29,789 direct. 933 00:35:29,790 --> 00:35:30,790 And 934 00:35:32,460 --> 00:35:34,229 yeah, you can set, for example, your A 935 00:35:34,230 --> 00:35:36,359 and B, and you can 936 00:35:36,360 --> 00:35:38,849 with a get you can read your results 937 00:35:38,850 --> 00:35:41,099 and it's doing some some validation, 938 00:35:41,100 --> 00:35:42,689 whether you're accessing something that 939 00:35:42,690 --> 00:35:44,969 is not not within the range 940 00:35:44,970 --> 00:35:46,529 of what you specified. 941 00:35:46,530 --> 00:35:48,749 And it also generates you 942 00:35:48,750 --> 00:35:49,750 some, 943 00:35:52,050 --> 00:35:54,179 you know, some existing methods for it. 944 00:35:55,980 --> 00:35:57,089 OK, let's do this. 945 00:35:59,400 --> 00:36:01,709 Uh, those sectors. 946 00:36:01,710 --> 00:36:04,019 Um, let's go to the actually 947 00:36:04,020 --> 00:36:06,000 back door such workspace. 948 00:36:07,110 --> 00:36:08,110 That's OK. 949 00:36:13,020 --> 00:36:15,659 And compiled 950 00:36:15,660 --> 00:36:17,310 to see. 951 00:36:19,430 --> 00:36:21,739 Oh, I 952 00:36:21,740 --> 00:36:22,909 know I know why 953 00:36:25,040 --> 00:36:27,079 there is a do. 954 00:36:32,870 --> 00:36:35,149 So it generated the two files 955 00:36:35,150 --> 00:36:37,339 for me, the the 956 00:36:37,340 --> 00:36:39,169 the one that was just showing to you. 957 00:36:39,170 --> 00:36:41,249 And it also generated a fire 958 00:36:41,250 --> 00:36:42,829 that is cold, bitter cold, the 959 00:36:44,430 --> 00:36:47,449 encapsulation and 960 00:36:47,450 --> 00:36:49,189 what this does look, 961 00:36:50,390 --> 00:36:52,819 it's not working as the pictures. 962 00:36:52,820 --> 00:36:53,820 OK, 963 00:36:54,950 --> 00:36:57,319 well, we just don't know 964 00:36:57,320 --> 00:36:58,639 the results. 965 00:37:01,250 --> 00:37:03,739 And in the similar capitulation, you can 966 00:37:05,690 --> 00:37:08,779 you can actually run the 967 00:37:08,780 --> 00:37:10,699 the and sell off. 968 00:37:10,700 --> 00:37:13,219 So let's step 969 00:37:13,220 --> 00:37:14,149 back up first. 970 00:37:14,150 --> 00:37:15,979 So when you're when you would do it, 971 00:37:15,980 --> 00:37:18,409 ordinarily you would have to 972 00:37:19,580 --> 00:37:20,580 concede, 973 00:37:22,130 --> 00:37:23,869 Yeah, if you do an ordinary, you would 974 00:37:23,870 --> 00:37:26,599 have to create an exciting 975 00:37:26,600 --> 00:37:28,879 platform studio project and that project 976 00:37:28,880 --> 00:37:29,959 you would have to need. 977 00:37:29,960 --> 00:37:32,749 You would need to import the IP court 978 00:37:32,750 --> 00:37:34,369 after you imported a picture. 979 00:37:34,370 --> 00:37:36,469 You can then synthesize 980 00:37:36,470 --> 00:37:39,199 it. You have to write some code and 981 00:37:39,200 --> 00:37:40,339 and so on. And 982 00:37:41,360 --> 00:37:43,459 all of this gets gets 983 00:37:43,460 --> 00:37:45,589 very annoying. And if you're 984 00:37:45,590 --> 00:37:47,599 if you want to change something, it takes 985 00:37:47,600 --> 00:37:49,839 about two minutes before you can actually 986 00:37:49,840 --> 00:37:52,219 are changing some C code 987 00:37:52,220 --> 00:37:54,649 and you want to show the 988 00:37:54,650 --> 00:37:55,829 you want to see the change that is 989 00:37:55,830 --> 00:37:57,229 introduced in the process. 990 00:37:57,230 --> 00:37:59,209 It takes about two minutes. 991 00:37:59,210 --> 00:38:00,210 And 992 00:38:02,630 --> 00:38:05,420 let me go like. 993 00:38:10,650 --> 00:38:11,650 Like here, 994 00:38:12,930 --> 00:38:14,429 I prepared some scene 995 00:38:15,990 --> 00:38:17,969 simulation results and. 996 00:38:23,580 --> 00:38:24,580 Like this. 997 00:38:25,590 --> 00:38:28,349 So you have your UFC files 998 00:38:28,350 --> 00:38:30,089 and there is a program 999 00:38:31,500 --> 00:38:33,599 which is test don't see, it doesn't 1000 00:38:33,600 --> 00:38:35,159 look very extraordinary. 1001 00:38:36,210 --> 00:38:37,210 Oh no, you can't. 1002 00:38:39,270 --> 00:38:41,489 OK, let me use to 1003 00:38:41,490 --> 00:38:41,819 test 1004 00:38:41,820 --> 00:38:42,820 it to reduce. 1005 00:38:48,110 --> 00:38:49,110 So 1006 00:38:50,660 --> 00:38:52,789 what I'm doing here is, if you 1007 00:38:52,790 --> 00:38:55,079 would usually you can 1008 00:38:55,080 --> 00:38:56,779 this, if of some, is actually you just 1009 00:38:56,780 --> 00:38:58,849 use because if you are 1010 00:38:58,850 --> 00:39:00,679 running it on the FPGA, then 1011 00:39:01,760 --> 00:39:04,369 there's a there's a problem that 1012 00:39:04,370 --> 00:39:05,370 when you're intruding, 1013 00:39:06,560 --> 00:39:08,679 then the the program doesn't fit 1014 00:39:08,680 --> 00:39:09,800 into the block room and 1015 00:39:11,390 --> 00:39:12,739 your program won't run on the 1016 00:39:12,740 --> 00:39:14,749 marketplace. And if you put it in the 1017 00:39:14,750 --> 00:39:16,159 room, which is not simulated in the 1018 00:39:16,160 --> 00:39:18,080 simulator, then it will not work at all. 1019 00:39:19,730 --> 00:39:21,799 This is really ridiculously stupid 1020 00:39:21,800 --> 00:39:22,800 stuff. 1021 00:39:23,900 --> 00:39:26,119 So I'm using here, I'm using 1022 00:39:26,120 --> 00:39:28,669 the the bus system, which is 1023 00:39:28,670 --> 00:39:29,719 the file for 1024 00:39:32,360 --> 00:39:34,099 which I was showing before, where you 1025 00:39:34,100 --> 00:39:35,100 can, 1026 00:39:36,240 --> 00:39:37,240 um, 1027 00:39:39,750 --> 00:39:41,509 where you can access the registers by 1028 00:39:41,510 --> 00:39:43,609 using those helper functions. 1029 00:39:43,610 --> 00:39:44,610 And 1030 00:39:46,730 --> 00:39:48,860 let me compile that. 1031 00:39:52,290 --> 00:39:54,659 Let me see what do we need, 1032 00:39:54,660 --> 00:39:55,660 Texas? 1033 00:39:56,410 --> 00:39:57,410 I mean, you 1034 00:39:58,630 --> 00:39:59,630 know, we need 1035 00:40:01,100 --> 00:40:03,369 to see we need to test 1036 00:40:03,370 --> 00:40:05,679 to see, test and. 1037 00:40:09,040 --> 00:40:12,089 But some let's see. 1038 00:40:12,090 --> 00:40:14,169 And let's 1039 00:40:14,170 --> 00:40:15,459 see if it works. 1040 00:40:15,460 --> 00:40:17,909 No. Oh, you just specify. 1041 00:40:22,850 --> 00:40:24,679 OK, I need to. 1042 00:40:24,680 --> 00:40:26,019 Just add buzz. 1043 00:40:27,140 --> 00:40:28,140 Let's see. 1044 00:40:28,940 --> 00:40:31,129 So this is now 1045 00:40:31,130 --> 00:40:32,629 compiled the test. 1046 00:40:32,630 --> 00:40:34,909 Let's see, um, that I was showing 1047 00:40:34,910 --> 00:40:37,069 you, this is 1048 00:40:37,070 --> 00:40:38,359 a test. Let's see. 1049 00:40:38,360 --> 00:40:40,579 And if I'm no 1050 00:40:40,580 --> 00:40:42,739 running it, then 1051 00:40:42,740 --> 00:40:44,839 you can see it's adding five 1052 00:40:44,840 --> 00:40:47,539 plus 10 1053 00:40:47,540 --> 00:40:49,909 x a and the result is 15 1054 00:40:49,910 --> 00:40:50,910 hexadecimal. 1055 00:40:51,910 --> 00:40:54,229 If I'm one to change that. 1056 00:40:54,230 --> 00:40:56,599 You know, I just do something like this. 1057 00:40:56,600 --> 00:40:58,400 Oh no, this was the wrong file. 1058 00:41:00,990 --> 00:41:04,309 The uh, if I want to change 1059 00:41:04,310 --> 00:41:05,310 it here. 1060 00:41:08,110 --> 00:41:10,419 Then I just frequent pilots 1061 00:41:10,420 --> 00:41:11,420 and running. 1062 00:41:11,920 --> 00:41:13,659 And you're getting the new results. 1063 00:41:13,660 --> 00:41:15,789 And so this was simulating the 1064 00:41:15,790 --> 00:41:17,859 whole picture that 1065 00:41:17,860 --> 00:41:20,169 we just created without having 1066 00:41:20,170 --> 00:41:22,509 you to simulate the whole process. 1067 00:41:22,510 --> 00:41:23,979 But the problem the program that we're 1068 00:41:23,980 --> 00:41:26,559 using can still be used on 1069 00:41:26,560 --> 00:41:28,869 the microplates or on the process of that 1070 00:41:28,870 --> 00:41:31,089 is actually running on the FPGA. 1071 00:41:31,090 --> 00:41:33,309 And so you're saving 1072 00:41:33,310 --> 00:41:35,919 really a lot of time 1073 00:41:35,920 --> 00:41:37,479 by by doing this 1074 00:41:38,650 --> 00:41:41,049 because this runs significantly faster 1075 00:41:41,050 --> 00:41:42,849 if you're the turnaround time. 1076 00:41:42,850 --> 00:41:44,949 As I said, between changing your 1077 00:41:44,950 --> 00:41:47,589 C code and seeing it and the 1078 00:41:47,590 --> 00:41:49,599 and the isam of the change would be like 1079 00:41:49,600 --> 00:41:51,819 two minutes and you could see it's 1080 00:41:51,820 --> 00:41:53,979 here. It's just a matter of seconds 1081 00:41:53,980 --> 00:41:56,199 so that you can do try 1082 00:41:56,200 --> 00:41:57,200 and error. 1083 00:41:57,960 --> 00:41:58,960 Um, 1084 00:42:00,460 --> 00:42:01,460 good. 1085 00:42:01,980 --> 00:42:04,059 So yeah, so this is 1086 00:42:05,350 --> 00:42:07,149 basically over the wanted to show it to 1087 00:42:07,150 --> 00:42:08,150 you? 1088 00:42:08,440 --> 00:42:10,270 As I said, all is 1089 00:42:11,350 --> 00:42:12,609 well, it didn't say that actually 1090 00:42:12,610 --> 00:42:14,769 appears. That shows part of my 1091 00:42:14,770 --> 00:42:17,429 bachelor or my pitch issues. 1092 00:42:17,430 --> 00:42:19,569 No, they're not so 1093 00:42:19,570 --> 00:42:20,570 different. 1094 00:42:21,760 --> 00:42:23,769 I've been working on it for for credit 1095 00:42:23,770 --> 00:42:24,770 for a few years, 1096 00:42:25,880 --> 00:42:27,549 it says Box. 1097 00:42:27,550 --> 00:42:29,709 I know that. So if you encounter any 1098 00:42:29,710 --> 00:42:31,899 of those, I would kindly ask you to 1099 00:42:31,900 --> 00:42:33,369 report it. 1100 00:42:33,370 --> 00:42:36,519 And what I really want to 1101 00:42:36,520 --> 00:42:38,919 bring to you as a message is that 1102 00:42:38,920 --> 00:42:41,019 programing FPGA is doesn't need to 1103 00:42:41,020 --> 00:42:42,020 be hard. 1104 00:42:42,740 --> 00:42:44,439 Just the tooling that sucks and the 1105 00:42:44,440 --> 00:42:45,700 language. And 1106 00:42:46,960 --> 00:42:49,239 so basically, yeah, so 1107 00:42:49,240 --> 00:42:50,240 but the Huntress, OK, 1108 00:42:52,870 --> 00:42:55,359 so I really want to 1109 00:42:55,360 --> 00:42:57,909 bring to you the simplicity 1110 00:42:57,910 --> 00:43:00,339 of being able to 1111 00:43:00,340 --> 00:43:02,559 to program. If PJ's and 1112 00:43:02,560 --> 00:43:05,139 I would really be welcome 1113 00:43:05,140 --> 00:43:06,159 would be really nice. 1114 00:43:06,160 --> 00:43:08,199 If you could take a look at Peter dot 1115 00:43:08,200 --> 00:43:10,359 piece HDL dot org, you know, 1116 00:43:10,360 --> 00:43:12,699 tested crash reported. 1117 00:43:12,700 --> 00:43:15,339 And if you're interested 1118 00:43:15,340 --> 00:43:17,409 in having a nice boat that comes along 1119 00:43:17,410 --> 00:43:19,729 with it, you can go to boats to 1120 00:43:19,730 --> 00:43:21,909 the other dog and give 1121 00:43:21,910 --> 00:43:24,069 me a hint on what the price for this 1122 00:43:24,070 --> 00:43:25,659 boat should be. 1123 00:43:25,660 --> 00:43:27,849 And if you're interested in 1124 00:43:29,650 --> 00:43:32,189 and following me, whatever I'm doing with 1125 00:43:32,190 --> 00:43:34,779 them, I'm on Twitter, Facebook, Google+. 1126 00:43:34,780 --> 00:43:35,829 I'm not actually on Google. 1127 00:43:35,830 --> 00:43:38,259 Plus it's just a creative contact 1128 00:43:38,260 --> 00:43:40,389 and and you 1129 00:43:40,390 --> 00:43:42,579 can read in the blog about what 1130 00:43:42,580 --> 00:43:44,709 I'm up to if I have time to which 1131 00:43:44,710 --> 00:43:46,089 I didn't have in the last few months. 1132 00:43:48,400 --> 00:43:50,230 Do we have any questions? 1133 00:44:02,340 --> 00:44:03,659 Microphone one, two. 1134 00:44:04,890 --> 00:44:06,329 So two questions. 1135 00:44:06,330 --> 00:44:08,489 Question one How do you deal with 1136 00:44:08,490 --> 00:44:10,499 two and more clocks in a design? 1137 00:44:10,500 --> 00:44:12,509 Yes. And how do you? 1138 00:44:12,510 --> 00:44:14,639 And this is, can I set up the 1139 00:44:14,640 --> 00:44:16,349 cell at my home? 1140 00:44:16,350 --> 00:44:17,219 Yes. 1141 00:44:17,220 --> 00:44:18,009 OK. 1142 00:44:18,010 --> 00:44:19,109 I was the first one. 1143 00:44:19,110 --> 00:44:20,639 A little bit more details, please. 1144 00:44:21,660 --> 00:44:22,660 OK. 1145 00:44:23,070 --> 00:44:25,289 So if you're if you're doing 1146 00:44:25,290 --> 00:44:26,639 something that is a little bit more 1147 00:44:26,640 --> 00:44:28,979 serious than blinking at this 1148 00:44:28,980 --> 00:44:31,529 and you have some privacy concerns. 1149 00:44:31,530 --> 00:44:33,359 There's a command line version of HDL 1150 00:44:33,360 --> 00:44:35,249 available that you can use. 1151 00:44:35,250 --> 00:44:37,799 There is no need to run it on server. 1152 00:44:37,800 --> 00:44:39,869 But the reason I'm not advertising 1153 00:44:39,870 --> 00:44:42,449 it so much is because I know that 1154 00:44:42,450 --> 00:44:43,409 most of you are lazy. 1155 00:44:43,410 --> 00:44:46,169 And when it comes to reporting bugs and 1156 00:44:46,170 --> 00:44:48,029 when it's crashing on the server, I can 1157 00:44:48,030 --> 00:44:49,739 actually see it and I can take care of 1158 00:44:49,740 --> 00:44:50,639 it. 1159 00:44:50,640 --> 00:44:53,159 And also, 1160 00:44:53,160 --> 00:44:55,169 this is it's also ensured that this is 1161 00:44:55,170 --> 00:44:57,239 the latest version of the compiler that 1162 00:44:57,240 --> 00:44:58,240 you're using. 1163 00:44:59,070 --> 00:45:00,779 So there's a there's a command line 1164 00:45:00,780 --> 00:45:03,239 version, the 1165 00:45:03,240 --> 00:45:05,059 that's a web biggie. 1166 00:45:06,270 --> 00:45:08,579 I didn't make that open-source 1167 00:45:08,580 --> 00:45:10,529 yet. I'm not sure if I ever will because 1168 00:45:10,530 --> 00:45:12,750 I want to have a single. 1169 00:45:14,310 --> 00:45:16,139 I want to have a single place where 1170 00:45:16,140 --> 00:45:17,280 everything is concentrated. 1171 00:45:19,500 --> 00:45:21,749 Yeah, but there's there is no restriction 1172 00:45:21,750 --> 00:45:23,539 there and it's open source. 1173 00:45:23,540 --> 00:45:25,019 So if you're if you're unhappy with what 1174 00:45:25,020 --> 00:45:26,439 I did was what I'm doing, just it. 1175 00:45:28,070 --> 00:45:29,070 Hmm. 1176 00:45:29,790 --> 00:45:31,859 OK. So how stable is the 1177 00:45:31,860 --> 00:45:34,169 language? So if I write code today, 1178 00:45:34,170 --> 00:45:36,029 well, it's still run in two years? 1179 00:45:36,030 --> 00:45:38,009 Or do you think you will still at some 1180 00:45:38,010 --> 00:45:40,289 synthetic changes? 1181 00:45:40,290 --> 00:45:42,419 I would say 1182 00:45:42,420 --> 00:45:44,040 I might add features 1183 00:45:46,380 --> 00:45:49,679 small syntactic sugar features 1184 00:45:49,680 --> 00:45:52,229 that increase the readability. 1185 00:45:52,230 --> 00:45:54,449 But as of now, 1186 00:45:54,450 --> 00:45:56,519 I didn't make any changes in the last 1187 00:45:57,660 --> 00:45:58,739 year or so. 1188 00:45:58,740 --> 00:46:01,439 Even more so, I think that 1189 00:46:01,440 --> 00:46:02,939 was what I have from a language 1190 00:46:02,940 --> 00:46:05,239 perspective is quite stable and 1191 00:46:05,240 --> 00:46:07,409 and well-suited for for its tasks. 1192 00:46:07,410 --> 00:46:08,970 So there was no there were no tasks that 1193 00:46:10,200 --> 00:46:12,149 seemed like we were thinking like, I need 1194 00:46:12,150 --> 00:46:13,949 to have some language, different, 1195 00:46:13,950 --> 00:46:15,300 different language construct for that. 1196 00:46:18,960 --> 00:46:21,269 Your approach is to make it easier for 1197 00:46:21,270 --> 00:46:23,429 poor animals to fight 1198 00:46:24,840 --> 00:46:27,419 FPGA stuff. 1199 00:46:27,420 --> 00:46:29,669 But there's a difference in thinking 1200 00:46:29,670 --> 00:46:31,410 if you know if you don't, right? 1201 00:46:32,670 --> 00:46:35,359 If you if you write code for 1202 00:46:35,360 --> 00:46:37,319 video, you don't write code, but 1203 00:46:37,320 --> 00:46:38,369 behavior. 1204 00:46:38,370 --> 00:46:40,509 And by a very large 1205 00:46:40,510 --> 00:46:41,750 looks like and 1206 00:46:43,080 --> 00:46:45,389 HD, it looks like I say Pascal, 1207 00:46:45,390 --> 00:46:46,859 you error. 1208 00:46:46,860 --> 00:46:48,179 It's totally different. 1209 00:46:48,180 --> 00:46:50,129 I'm not sure if 1210 00:46:51,270 --> 00:46:53,609 another language should not be like, 1211 00:46:53,610 --> 00:46:55,440 let's say the behave stuff 1212 00:46:56,610 --> 00:46:58,739 more describe what I have the 1213 00:46:58,740 --> 00:47:01,229 people to see that it's behavior 1214 00:47:02,790 --> 00:47:04,589 and with you, it looks like she could, 1215 00:47:04,590 --> 00:47:06,179 but it's not code. 1216 00:47:06,180 --> 00:47:08,309 If if it's a loop, 1217 00:47:08,310 --> 00:47:10,469 it's you cannot comfier 1218 00:47:10,470 --> 00:47:12,779 a loop from whatever plumbing 1219 00:47:12,780 --> 00:47:14,939 language to virtually every dog 1220 00:47:14,940 --> 00:47:16,379 or even yours. 1221 00:47:16,380 --> 00:47:18,719 And this is this makes a lot of people 1222 00:47:18,720 --> 00:47:20,429 they must see different and this is not 1223 00:47:20,430 --> 00:47:21,629 really supported. 1224 00:47:21,630 --> 00:47:23,879 Now you say, OK, it's 1225 00:47:23,880 --> 00:47:25,319 the idea is great. 1226 00:47:25,320 --> 00:47:27,659 It looks more complex, 1227 00:47:27,660 --> 00:47:28,409 less complicated. 1228 00:47:28,410 --> 00:47:29,670 So, yeah, 1229 00:47:30,930 --> 00:47:32,420 so this is true. 1230 00:47:33,480 --> 00:47:34,599 The language looks. 1231 00:47:34,600 --> 00:47:36,209 It looks cleaner, but it is not. 1232 00:47:36,210 --> 00:47:38,529 See, it is a Perl 1233 00:47:38,530 --> 00:47:40,719 language that in the end, translate 1234 00:47:40,720 --> 00:47:42,689 to a process oriented language like video 1235 00:47:42,690 --> 00:47:44,999 and very look. This implies 1236 00:47:45,000 --> 00:47:47,089 that you have to do 1237 00:47:47,090 --> 00:47:49,229 to think to rip your heart, to wrap 1238 00:47:49,230 --> 00:47:51,329 your head around the new product and that 1239 00:47:51,330 --> 00:47:52,619 it introduces. 1240 00:47:52,620 --> 00:47:54,809 And this is like 1241 00:47:54,810 --> 00:47:56,969 when you are when you are coming from a 1242 00:47:58,620 --> 00:48:00,719 format from C and you want 1243 00:48:00,720 --> 00:48:02,279 to learn functional programing, you need 1244 00:48:02,280 --> 00:48:04,379 to wrap your brain around that as 1245 00:48:04,380 --> 00:48:06,539 well. And HDL will 1246 00:48:06,540 --> 00:48:08,729 not solve that for you. 1247 00:48:08,730 --> 00:48:10,169 It doesn't do anything. Magic was to 1248 00:48:10,170 --> 00:48:11,170 follow. 1249 00:48:11,820 --> 00:48:14,159 It's yeah, it's a new purging, 1250 00:48:14,160 --> 00:48:16,859 but at least the language is not. 1251 00:48:16,860 --> 00:48:19,409 The tooling is significantly 1252 00:48:19,410 --> 00:48:21,149 better. I have called folding in my 1253 00:48:21,150 --> 00:48:22,979 editor, which is something that you 1254 00:48:22,980 --> 00:48:25,169 cannot say about most editors and the 1255 00:48:25,170 --> 00:48:26,170 exciting stuff. 1256 00:48:27,360 --> 00:48:29,609 And it is much, 1257 00:48:29,610 --> 00:48:31,769 much better tooling and hopefully 1258 00:48:31,770 --> 00:48:34,229 better usability overall, 1259 00:48:34,230 --> 00:48:35,819 which should ease the learning curve 1260 00:48:35,820 --> 00:48:37,199 significantly. 1261 00:48:37,200 --> 00:48:38,340 A question from the internet. 1262 00:48:40,170 --> 00:48:42,150 OK, I've got a small 1263 00:48:43,290 --> 00:48:44,370 question here. 1264 00:48:45,690 --> 00:48:47,699 Someone was asking whether there will be 1265 00:48:47,700 --> 00:48:50,489 PDF renderings of your slides available 1266 00:48:50,490 --> 00:48:52,889 because they were kind of hard to read 1267 00:48:52,890 --> 00:48:55,559 on the high quality screens as well. 1268 00:48:55,560 --> 00:48:58,049 Yeah, they will be available. 1269 00:48:58,050 --> 00:48:59,849 I just finished them like five minutes 1270 00:48:59,850 --> 00:49:02,009 before the presentation, so I 1271 00:49:02,010 --> 00:49:03,659 didn't have time to upload them yet, but 1272 00:49:03,660 --> 00:49:04,859 they will be in the next series of too 1273 00:49:04,860 --> 00:49:06,539 far from them, I guess. 1274 00:49:06,540 --> 00:49:08,579 OK, and then actual technical question, 1275 00:49:08,580 --> 00:49:10,469 are there any proof of concepts for 1276 00:49:10,470 --> 00:49:12,599 larger scale projects and what is 1277 00:49:12,600 --> 00:49:14,399 your adaptation for runtime, dynamic 1278 00:49:14,400 --> 00:49:15,400 assertions, 1279 00:49:16,350 --> 00:49:18,209 runtime, dynamic assertions? 1280 00:49:18,210 --> 00:49:19,829 I have no idea what he means by that, but 1281 00:49:19,830 --> 00:49:21,059 for the first question, I can tell you 1282 00:49:21,060 --> 00:49:22,060 that. 1283 00:49:22,710 --> 00:49:24,809 So I was using 1284 00:49:24,810 --> 00:49:26,609 one of the bigger codes that was writing 1285 00:49:26,610 --> 00:49:27,899 that actually a student of mine was 1286 00:49:27,900 --> 00:49:30,819 writing and he was doing that in the gym. 1287 00:49:30,820 --> 00:49:33,209 Ed was the 1288 00:49:33,210 --> 00:49:34,859 discrete way for transformation, which is 1289 00:49:34,860 --> 00:49:37,019 like two and a half 1290 00:49:37,020 --> 00:49:38,939 thousand lines of 1291 00:49:40,600 --> 00:49:41,519 code. 1292 00:49:41,520 --> 00:49:44,219 It doesn't sound like a huge project, but 1293 00:49:44,220 --> 00:49:45,779 if you would think of two and a half 1294 00:49:45,780 --> 00:49:47,339 thousand lines of assembler, then you 1295 00:49:47,340 --> 00:49:49,289 would think, OK, this is maybe a bit 1296 00:49:49,290 --> 00:49:50,339 harder to do. 1297 00:49:50,340 --> 00:49:52,619 And so the 1298 00:49:52,620 --> 00:49:54,539 lines of code can be seen like this, 1299 00:49:54,540 --> 00:49:55,589 which results in like, 1300 00:49:56,700 --> 00:49:58,559 what was it, seventy five thousand lines 1301 00:49:58,560 --> 00:50:00,119 of code? 1302 00:50:00,120 --> 00:50:02,429 And from a from a 1303 00:50:02,430 --> 00:50:03,689 mental perspective, this was very 1304 00:50:03,690 --> 00:50:05,879 challenging to to do 1305 00:50:05,880 --> 00:50:07,469 because they had to do the timing right 1306 00:50:07,470 --> 00:50:08,470 and stuff like this. 1307 00:50:09,510 --> 00:50:10,499 But I don't see that. 1308 00:50:10,500 --> 00:50:13,589 I don't see that Pascal would fail for 1309 00:50:13,590 --> 00:50:16,469 for certain types of projects because 1310 00:50:16,470 --> 00:50:18,779 in the end, you can always instantiate 1311 00:50:18,780 --> 00:50:20,879 video codes or are very 1312 00:50:20,880 --> 00:50:22,319 local modules. 1313 00:50:22,320 --> 00:50:23,849 You're just losing the ability to 1314 00:50:23,850 --> 00:50:26,190 simulate them as fast as you can with 1315 00:50:27,920 --> 00:50:30,089 with this issue. 1316 00:50:30,090 --> 00:50:32,249 OK, so microphone two 1317 00:50:32,250 --> 00:50:33,389 Oh, 1318 00:50:33,390 --> 00:50:35,249 I have a small clarification, a little 1319 00:50:35,250 --> 00:50:36,959 clarification regarding the runtime 1320 00:50:36,960 --> 00:50:39,269 dynamic assertion him.And checking 1321 00:50:39,270 --> 00:50:41,339 setup and holding Time's 1322 00:50:41,340 --> 00:50:42,339 Up. 1323 00:50:42,340 --> 00:50:43,500 No, I'm not doing timing. 1324 00:50:45,150 --> 00:50:47,279 Yeah. So if 1325 00:50:47,280 --> 00:50:49,259 your design is not meeting the timing 1326 00:50:49,260 --> 00:50:51,449 requirements, then this 1327 00:50:51,450 --> 00:50:52,829 is something that you will get told. 1328 00:50:52,830 --> 00:50:54,929 And in the synthesis step, this is 1329 00:50:54,930 --> 00:50:57,059 not something I'm looking into, 1330 00:50:57,060 --> 00:50:58,060 at least right now. 1331 00:51:02,240 --> 00:51:03,379 All right. Thank you. 1332 00:51:03,380 --> 00:51:04,819 What are your thoughts regarding code 1333 00:51:04,820 --> 00:51:06,889 reuse, such as some kind of standard 1334 00:51:06,890 --> 00:51:09,019 library or including existing code 1335 00:51:09,020 --> 00:51:10,219 snippets? 1336 00:51:10,220 --> 00:51:12,409 Well, you can use those 1337 00:51:12,410 --> 00:51:14,339 you can, as I said, you can instantiate 1338 00:51:14,340 --> 00:51:16,219 video modules or very large modules. 1339 00:51:17,390 --> 00:51:18,919 All you have to do is to do your 1340 00:51:18,920 --> 00:51:19,969 declaring. 1341 00:51:19,970 --> 00:51:21,649 Basically, you're just declaring an 1342 00:51:21,650 --> 00:51:23,869 interface where it says, which 1343 00:51:23,870 --> 00:51:26,299 is like a component declaration and video 1344 00:51:26,300 --> 00:51:27,829 or saying you have this, but this part, 1345 00:51:27,830 --> 00:51:28,969 this part, and then you can use it 1346 00:51:31,220 --> 00:51:33,529 and be as HDL code and say, 1347 00:51:33,530 --> 00:51:34,249 I 1348 00:51:34,250 --> 00:51:36,619 write some kind of a module to 1349 00:51:36,620 --> 00:51:38,209 process an image and I want to share it 1350 00:51:38,210 --> 00:51:39,210 with people. 1351 00:51:39,680 --> 00:51:41,089 Are there any mechanisms for including 1352 00:51:41,090 --> 00:51:42,090 that in an easy way? 1353 00:51:42,950 --> 00:51:45,079 Not right now. No, you would have 1354 00:51:45,080 --> 00:51:46,849 to put in the sources. 1355 00:51:46,850 --> 00:51:47,850 OK, thank you. 1356 00:51:50,700 --> 00:51:52,709 Hello. Since you made 1357 00:51:52,710 --> 00:51:55,529 such a nice person destroying 1358 00:51:55,530 --> 00:51:57,929 all the traditional competition, 1359 00:51:57,930 --> 00:52:00,329 I wonder whether you also convert to lava 1360 00:52:00,330 --> 00:52:02,669 or plastic so 1361 00:52:02,670 --> 00:52:04,799 you can destroy all the industrial 1362 00:52:04,800 --> 00:52:05,800 solutions? 1363 00:52:07,110 --> 00:52:09,119 This lava really OK? 1364 00:52:09,120 --> 00:52:10,919 Yeah, no, I didn't do that. 1365 00:52:10,920 --> 00:52:12,989 Sorry, but it would be 1366 00:52:12,990 --> 00:52:14,519 interesting to do 1367 00:52:14,520 --> 00:52:16,500 back to the questions from the internet. 1368 00:52:18,000 --> 00:52:20,309 Another listener at home 1369 00:52:20,310 --> 00:52:22,289 found it difficult and time consuming to 1370 00:52:22,290 --> 00:52:24,689 handle multiple hardware course and 1371 00:52:24,690 --> 00:52:26,609 special bootloaders for each core. 1372 00:52:26,610 --> 00:52:28,499 Is there a simple method implementing 1373 00:52:28,500 --> 00:52:31,169 something like a stage to illiterate 1374 00:52:31,170 --> 00:52:32,170 or boot system? 1375 00:52:35,220 --> 00:52:36,510 What is he talking about? 1376 00:52:39,240 --> 00:52:41,219 Maybe you got the window open for a 1377 00:52:41,220 --> 00:52:42,419 different talk. 1378 00:52:42,420 --> 00:52:43,420 Running in parallel. 1379 00:52:44,610 --> 00:52:46,139 That's what he said. 1380 00:52:46,140 --> 00:52:47,999 I already asked him for clarification, 1381 00:52:48,000 --> 00:52:49,019 but that's it. 1382 00:52:49,020 --> 00:52:50,400 We could switch to a different one. 1383 00:52:51,570 --> 00:52:53,039 How accurate this degenerated. 1384 00:52:53,040 --> 00:52:55,589 We HDL code, for instance, my HDL 1385 00:52:55,590 --> 00:52:57,839 produces sometimes false we HDL 1386 00:52:57,840 --> 00:52:59,399 code, which is very annoying 1387 00:53:00,960 --> 00:53:02,969 because it always produces a perfect 1388 00:53:02,970 --> 00:53:03,970 code. 1389 00:53:11,880 --> 00:53:14,079 Now, this what I think 1390 00:53:14,080 --> 00:53:16,969 when I'm also I, 1391 00:53:16,970 --> 00:53:19,089 I created a very log 1392 00:53:19,090 --> 00:53:21,459 output module and 1393 00:53:21,460 --> 00:53:23,109 it's on Bitbucket already. 1394 00:53:23,110 --> 00:53:25,209 But you know, I was I was thinking 1395 00:53:25,210 --> 00:53:26,829 like, OK, maybe this is a one way 1396 00:53:26,830 --> 00:53:29,349 project, but then we realized that 1397 00:53:29,350 --> 00:53:30,309 it's not. 1398 00:53:30,310 --> 00:53:31,839 And I wasn't happy with the quality. 1399 00:53:31,840 --> 00:53:33,999 So I really I really put a lot 1400 00:53:34,000 --> 00:53:36,189 of emphasis into being sure 1401 00:53:36,190 --> 00:53:38,109 that the code to generate that is 1402 00:53:38,110 --> 00:53:40,179 generated is behaving exactly 1403 00:53:40,180 --> 00:53:42,789 the same way as as the 1404 00:53:42,790 --> 00:53:44,589 other code that you're describing. 1405 00:53:44,590 --> 00:53:46,839 And I didn't have 1406 00:53:46,840 --> 00:53:49,569 any reports that the video code generated 1407 00:53:49,570 --> 00:53:51,249 was was incorrect 1408 00:53:53,110 --> 00:53:55,329 compared to what you're describing in 1409 00:53:55,330 --> 00:53:56,269 audio. 1410 00:53:56,270 --> 00:53:58,599 So yeah, there is no formal proof 1411 00:53:58,600 --> 00:54:00,699 that this is even though I'm 1412 00:54:00,700 --> 00:54:03,339 academic, but this is working, 1413 00:54:03,340 --> 00:54:05,439 but I'm rather crashing the 1414 00:54:05,440 --> 00:54:07,659 compilers and generating 1415 00:54:07,660 --> 00:54:08,660 anything that is wrong. 1416 00:54:10,390 --> 00:54:12,579 But to microphone to 1417 00:54:12,580 --> 00:54:12,919 OK. 1418 00:54:12,920 --> 00:54:15,519 So if you have 1419 00:54:15,520 --> 00:54:17,769 done a lot of stuff with very long 1420 00:54:17,770 --> 00:54:20,259 and have looked into video, 1421 00:54:20,260 --> 00:54:23,019 would you still suggest to 1422 00:54:23,020 --> 00:54:25,599 have a look at PS HD and 1423 00:54:27,040 --> 00:54:29,349 just because I'm lazy, use 1424 00:54:29,350 --> 00:54:32,199 Sagal? Or is there any major, 1425 00:54:32,200 --> 00:54:33,729 you know, improvement? 1426 00:54:33,730 --> 00:54:36,009 For me, it looks like 1427 00:54:36,010 --> 00:54:37,479 maybe I might. 1428 00:54:37,480 --> 00:54:39,609 Development would be quicker because 1429 00:54:39,610 --> 00:54:40,659 I need less code. 1430 00:54:40,660 --> 00:54:42,909 But like if I have done bigger 1431 00:54:44,320 --> 00:54:46,659 projects and very luck, 1432 00:54:46,660 --> 00:54:48,969 is there any drawbacks and going to this, 1433 00:54:48,970 --> 00:54:49,970 you 1434 00:54:50,410 --> 00:54:52,479 know, there are really just 1435 00:54:52,480 --> 00:54:54,579 more upsides, you know, can you do this 1436 00:54:54,580 --> 00:54:56,569 demo? Was there? 1437 00:54:56,570 --> 00:54:58,239 No, no. 1438 00:54:58,240 --> 00:54:59,289 You see? So, 1439 00:55:01,570 --> 00:55:03,939 yeah, so the the advantage for 1440 00:55:03,940 --> 00:55:06,549 the users that are already familiar with 1441 00:55:06,550 --> 00:55:07,479 was very, very low. 1442 00:55:07,480 --> 00:55:09,729 Very long is you're 1443 00:55:09,730 --> 00:55:11,139 getting a significant speed up in 1444 00:55:11,140 --> 00:55:12,140 simulation. 1445 00:55:12,970 --> 00:55:15,039 And this leads to a quicker turnaround 1446 00:55:15,040 --> 00:55:16,059 time. And also 1447 00:55:17,110 --> 00:55:19,329 what I what I find very, very important 1448 00:55:19,330 --> 00:55:22,269 and is that the simulation 1449 00:55:22,270 --> 00:55:24,549 the vehicle with is generated is behaving 1450 00:55:24,550 --> 00:55:26,529 in a simulation the same way as in the 1451 00:55:26,530 --> 00:55:27,530 hardware. 1452 00:55:28,060 --> 00:55:29,349 This is something that I've really put an 1453 00:55:29,350 --> 00:55:32,259 emphasis on, and this is not always, 1454 00:55:32,260 --> 00:55:34,149 always easy. And especially in very look, 1455 00:55:34,150 --> 00:55:35,919 I found it to be very difficult to 1456 00:55:35,920 --> 00:55:37,749 actually do that. 1457 00:55:37,750 --> 00:55:39,609 But maybe that's because I'm a secondary 1458 00:55:39,610 --> 00:55:40,549 lock. 1459 00:55:40,550 --> 00:55:41,859 Um yeah. 1460 00:55:41,860 --> 00:55:42,860 So 1461 00:55:43,930 --> 00:55:45,999 I think there are I think there are 1462 00:55:46,000 --> 00:55:48,229 advantages to using 1463 00:55:48,230 --> 00:55:50,949 because in a professional environment 1464 00:55:50,950 --> 00:55:52,479 and especially when you're, for example, 1465 00:55:52,480 --> 00:55:54,639 when you're running the the discrete 1466 00:55:54,640 --> 00:55:56,709 way for transformation embedded 1467 00:55:56,710 --> 00:55:59,110 into into the open JPEG core 1468 00:56:00,130 --> 00:56:02,469 it takes to execute 1469 00:56:02,470 --> 00:56:04,750 the the open JPEG with embedded 1470 00:56:06,610 --> 00:56:08,529 simulated wafer transformation takes six 1471 00:56:08,530 --> 00:56:09,549 seconds. 1472 00:56:09,550 --> 00:56:10,840 And if you run it in, 1473 00:56:11,980 --> 00:56:13,809 if you run the picture through open JPEG 1474 00:56:13,810 --> 00:56:15,969 was in the reference 1475 00:56:15,970 --> 00:56:18,370 automation and in the virtual simulation, 1476 00:56:19,630 --> 00:56:21,819 it not just takes two and a half gigabyte 1477 00:56:21,820 --> 00:56:24,219 of valuable RAM or traditionnels 1478 00:56:24,220 --> 00:56:26,499 gigabytes. If you're if you're 1479 00:56:26,500 --> 00:56:28,030 if you're coding the memory of it wrong, 1480 00:56:29,080 --> 00:56:31,419 it also takes if one 1481 00:56:31,420 --> 00:56:33,069 factor of one thousand two hundred times 1482 00:56:33,070 --> 00:56:34,269 longer. 1483 00:56:34,270 --> 00:56:36,819 So, by the way, the simulation 1484 00:56:36,820 --> 00:56:37,869 takes an edge. 1485 00:56:37,870 --> 00:56:39,069 There takes 20 megabytes 1486 00:56:40,330 --> 00:56:41,379 for the open JPEG. 1487 00:56:41,380 --> 00:56:44,889 So I think those are really significant 1488 00:56:44,890 --> 00:56:46,629 speed ups and also as you can embed your 1489 00:56:46,630 --> 00:56:48,939 own configuration languages, and it has 1490 00:56:48,940 --> 00:56:51,009 very many extension 1491 00:56:51,010 --> 00:56:53,499 points that you can hook into to 1492 00:56:53,500 --> 00:56:54,859 to do what is not right now. 1493 00:56:54,860 --> 00:56:56,379 It's supported right now. 1494 00:56:56,380 --> 00:56:57,969 So I think it's fair. 1495 00:56:57,970 --> 00:57:00,249 OK. So do you still think 1496 00:57:00,250 --> 00:57:02,859 it's helpful to know very local? 1497 00:57:02,860 --> 00:57:04,959 As mentioned before, now it looks like 1498 00:57:04,960 --> 00:57:06,999 a programing language, not like a 1499 00:57:07,000 --> 00:57:09,129 hardware description language anymore. 1500 00:57:09,130 --> 00:57:10,539 It definitely helps. Yes. 1501 00:57:10,540 --> 00:57:11,540 OK. Yeah. 1502 00:57:14,620 --> 00:57:17,089 I have two questions, one is 1503 00:57:17,090 --> 00:57:19,159 what is your timeframe for 1504 00:57:19,160 --> 00:57:20,809 the boards like and by what is the 1505 00:57:20,810 --> 00:57:23,119 governance? And the second question 1506 00:57:23,120 --> 00:57:25,099 part of what makes Arduino so successful 1507 00:57:25,100 --> 00:57:27,049 is that people don't have to know so much 1508 00:57:27,050 --> 00:57:28,249 about the hardware anymore. 1509 00:57:28,250 --> 00:57:30,049 Like, if I want to use SBI on an Arduino, 1510 00:57:30,050 --> 00:57:31,009 I don't know. 1511 00:57:31,010 --> 00:57:32,269 I don't have to know which restaurant 1512 00:57:32,270 --> 00:57:34,789 registers to shift which bits in. 1513 00:57:34,790 --> 00:57:35,869 So is there going to be something like a 1514 00:57:35,870 --> 00:57:38,209 standard library that that 1515 00:57:38,210 --> 00:57:40,099 like, can I pick for say for you word 1516 00:57:40,100 --> 00:57:42,259 ICRC, whatever that I can simply 1517 00:57:42,260 --> 00:57:45,199 add to to my HDL project? 1518 00:57:45,200 --> 00:57:47,269 Yeah, this is this is really where 1519 00:57:47,270 --> 00:57:48,649 I'm calling out to you. 1520 00:57:48,650 --> 00:57:50,900 I really want you to use 1521 00:57:52,220 --> 00:57:54,439 and create those 1522 00:57:54,440 --> 00:57:55,819 calls, and I want you to be. 1523 00:57:55,820 --> 00:57:57,139 I want to. 1524 00:57:57,140 --> 00:57:59,509 I want to add some collaboration 1525 00:57:59,510 --> 00:58:00,889 where to choose, where you can have 1526 00:58:00,890 --> 00:58:02,599 modules pulled into. 1527 00:58:02,600 --> 00:58:04,669 So this would be really the ultimate goal 1528 00:58:04,670 --> 00:58:07,069 of of doing that right now. 1529 00:58:07,070 --> 00:58:09,229 I don't have it, and I'm very sad about 1530 00:58:09,230 --> 00:58:12,139 it, but I really would love to have it. 1531 00:58:12,140 --> 00:58:14,269 And furthermore, it's fun for the 1532 00:58:14,270 --> 00:58:16,129 boards like the board. 1533 00:58:16,130 --> 00:58:18,889 OK, so the time frame is that 1534 00:58:18,890 --> 00:58:21,589 we have a almost working prototype here. 1535 00:58:21,590 --> 00:58:24,379 And really 1536 00:58:24,380 --> 00:58:26,089 so the idea is I want to make an 1537 00:58:26,090 --> 00:58:28,369 Indiegogo campaign and want to 1538 00:58:28,370 --> 00:58:30,499 I want to get a big, big a number 1539 00:58:30,500 --> 00:58:32,419 of people to produce the bottles so that 1540 00:58:32,420 --> 00:58:33,349 they can get the price. 1541 00:58:33,350 --> 00:58:35,479 That is around 30 euros, which 1542 00:58:35,480 --> 00:58:37,609 I think is a really neat price. 1543 00:58:37,610 --> 00:58:39,709 And so for that, if 1544 00:58:39,710 --> 00:58:42,379 you're subscribing to the board's 1545 00:58:42,380 --> 00:58:44,059 thing, you know, that was the link that I 1546 00:58:44,060 --> 00:58:46,189 was mentioning, then you 1547 00:58:46,190 --> 00:58:47,809 can you can. 1548 00:58:47,810 --> 00:58:49,459 You will be notified when the when the 1549 00:58:49,460 --> 00:58:50,719 campaign goes up. 1550 00:58:50,720 --> 00:58:52,789 And I really hope to be able to put it 1551 00:58:52,790 --> 00:58:55,129 up in January so that 1552 00:58:55,130 --> 00:58:57,049 it's running through in February, so that 1553 00:58:57,050 --> 00:58:58,270 in March and 1554 00:58:59,360 --> 00:59:02,209 April kind of thing, you will 1555 00:59:02,210 --> 00:59:03,469 maybe get the board. 1556 00:59:03,470 --> 00:59:04,819 Awesome. Thanks. Thanks for the great 1557 00:59:04,820 --> 00:59:05,329 work. 1558 00:59:05,330 --> 00:59:07,159 Back to the questions from the internet. 1559 00:59:12,830 --> 00:59:15,109 Another question is, was 1560 00:59:15,110 --> 00:59:17,479 there any specific reason 1561 00:59:17,480 --> 00:59:20,029 behind designing 1562 00:59:20,030 --> 00:59:22,189 a new language instead of going 1563 00:59:22,190 --> 00:59:24,409 for something like Python, like 1564 00:59:24,410 --> 00:59:26,810 my HDL or Python in general? 1565 00:59:28,520 --> 00:59:31,069 So the way the 1566 00:59:31,070 --> 00:59:34,279 so be, it is a very long 1567 00:59:34,280 --> 00:59:36,889 video and my elbows are. 1568 00:59:36,890 --> 00:59:39,289 Those risks are process oriented 1569 00:59:39,290 --> 00:59:41,599 languages, and they work by 1570 00:59:41,600 --> 00:59:43,969 describing something, you know, 1571 00:59:43,970 --> 00:59:45,349 if you want to have a register, you say 1572 00:59:45,350 --> 00:59:46,459 something. 1573 00:59:46,460 --> 00:59:48,089 This would be a register. 1574 00:59:48,090 --> 00:59:49,279 No, no. The other thing and it's about 1575 00:59:49,280 --> 00:59:51,139 you saying, like, if rising, it's there, 1576 00:59:51,140 --> 00:59:53,419 then do this and do that and so on. 1577 00:59:53,420 --> 00:59:55,819 And when I was starting my PhD thesis, 1578 00:59:55,820 --> 00:59:58,340 I want to have an easy way to pass 1579 00:59:59,420 --> 01:00:01,909 the source code and make sense out of it. 1580 01:00:01,910 --> 01:00:03,979 And so this was the original motivation 1581 01:00:03,980 --> 01:00:06,109 to create audio, to have 1582 01:00:06,110 --> 01:00:08,329 some, some sane way 1583 01:00:08,330 --> 01:00:10,399 of making sense of the input 1584 01:00:10,400 --> 01:00:11,629 source. 1585 01:00:11,630 --> 01:00:13,819 And then I realized that actually, this 1586 01:00:13,820 --> 01:00:15,439 language is much simpler and nicer. 1587 01:00:15,440 --> 01:00:17,869 And so I thought, maybe 1588 01:00:17,870 --> 01:00:20,269 do something for the 1589 01:00:20,270 --> 01:00:22,489 the better of the community 1590 01:00:22,490 --> 01:00:23,749 that are interested in programing 1591 01:00:23,750 --> 01:00:24,750 languages. 1592 01:00:25,970 --> 01:00:28,039 There's also another suggestion 1593 01:00:28,040 --> 01:00:29,360 coming in from the Nets 1594 01:00:30,620 --> 01:00:33,019 since you mentioned pushing down 1595 01:00:33,020 --> 01:00:34,849 the price point of your boards. 1596 01:00:34,850 --> 01:00:36,619 Someone was wondering why you were using 1597 01:00:36,620 --> 01:00:38,809 an X Mega, which costs around 1598 01:00:38,810 --> 01:00:41,059 three euros apiece, while you could also 1599 01:00:41,060 --> 01:00:43,159 get an arm's microcontroller for 1600 01:00:43,160 --> 01:00:44,749 around a third of the price. 1601 01:00:46,400 --> 01:00:48,859 Yeah, that's because 1602 01:00:48,860 --> 01:00:52,009 I know the experience and 1603 01:00:52,010 --> 01:00:54,119 I know that the great 1604 01:00:54,120 --> 01:00:56,269 thing you have to put on the 1605 01:00:56,270 --> 01:00:58,389 the programing logic on the 1606 01:00:58,390 --> 01:01:00,739 X and then it was possible to do 1607 01:01:00,740 --> 01:01:02,479 and that's just the way it went. 1608 01:01:02,480 --> 01:01:04,759 And I really liked outMost. 1609 01:01:04,760 --> 01:01:05,960 So I took this one. 1610 01:01:08,060 --> 01:01:11,259 Maybe I could save a year or two if I 1611 01:01:11,260 --> 01:01:13,369 if I use another one, but I wouldn't 1612 01:01:13,370 --> 01:01:14,749 be familiar with it. And then you have 1613 01:01:14,750 --> 01:01:17,419 the cost of not being familiar with it, 1614 01:01:17,420 --> 01:01:19,309 which you have to consider as well. 1615 01:01:19,310 --> 01:01:21,409 Also, I like that you have some kind 1616 01:01:21,410 --> 01:01:24,889 of other audio capabilities, 1617 01:01:24,890 --> 01:01:25,890 which takes me on. 1618 01:01:27,080 --> 01:01:29,599 OK, I'm going to cut the Q&A 1619 01:01:29,600 --> 01:01:31,909 short because we're going over time, but 1620 01:01:31,910 --> 01:01:33,559 a big applause for Kirsten.