ChaosPad V1.1
Full screen

Server Notice:

hide

33c3-talk-7873 Latest text of pad 33c3-talk-7873 Saved Jan 12, 2021

 
Hallo Du!
Bevor du loslegst den Talk zu transkribieren, sieh dir bitte noch einmal unseren Style Guide an: https://wiki.c3subtitles.de/de:styleguide. Solltest du Fragen haben, dann kannst du uns gerne direkt fragen oder unter https://webirc.hackint.org/#irc://hackint.org/#subtitles oder https://rocket.events.ccc.de/channel/subtitles erreichen.
Bitte vergiss nicht deinen Fortschritt im Fortschrittsbalken auf der Seite des Talks einzutragen.
Vielen Dank für dein Engagement!
Hey you!
Prior to transcribing, please look at your style guide: https://wiki.c3subtitles.de/en:styleguide. If you have some questions you can either ask us personally or write us at https://webirc.hackint.org/#irc://hackint.org/#subtitles or https://rocket.events.ccc.de/channel/subtitles .
Please don't forget to mark your progress in the progress bar at the talk's website.
Thank you very much for your commitment!
======================================================================
 
 
All right, without any further ado, I would like to introduce Charlotte Papa, who is the main developer behind a spinal idol, a HeartWare description, language which you can use to program FTP, DJs and the like. He is working on spinal HDL full time and I'm looking forward to the presentation. Please give a warm round of applause for Shah. Thank you, so drunkest, OK. I will start to tell you a little bit about why we here and very logout not so good, then I will introduce you next year. And all the rest of the presentation will be about showing you example and thinking about. Why this is bizarre, by the way, that example are done. So, yeah, I have said before this presentation will only be about visible hardware. I will not talk about any simulation features outside of things. So, yeah, they are going very lurg, initially designed for simulation and documentation purposes, and it's only later that they were added as an input language for this tool. And that was a very long time ago, which mean yeah, Verdell and very missed many pictures that could be interesting. And to see to to infer hardware you have to use simulation constructs like processing and Facebook, which doesn't really make any sense from that point of view. And so you don't have things like obliterated programing and function and programing. It could send Trink to talk about objects not that far since it is able hardware, but in fact, it make a lot of sense. And I'll show you some examples of where it it it is really powerful. Then inveigling very simple concepts are often very verbose, like instating subcomponent or as module is very painful. And so you don't have some notion of interface. You are always enumerating signals one by one and many of the things that make them not so good and you don't have possibilities to rise absorption level. If you use Yaghdan very large, you will be still stuck in kind of real abstraction layer. You will still have to connect everything by hand. You will still have t
o define gaits one by one. I mean, it could be better then there is back to the 2008 system. But yeah, there are not really they have to say us. I mean they still keep the same from parodic between Furter you still have to use in different constructs. You are still using the eventa driven paradigm to tell then they still didn't offer any hardware description capabilities and. The idea to support could be very bad. I mean, there is many interesting features in both language, but depending that you're told that you have to use false impression of this, you will not be able to use them, which mean, yeah, you are still stuck in a subset of them. And as well as, for instance, um, system, Varella grew up a very interesting features, which is interface definitions. But we see in detail that Evan. This fetus is not that. That good system. OK, so, yeah, what to do next? Um, my solution are and it has a solution of other people. One solution is to use violence as necklaced language, which is automatically generated from higher level language. And there I go. It's been alleged. Yeah. So basically, um, it is an ambitious project that I started in December 2014. It focus exclusively on Atayal description. So the idea behind that is to do not to not do any compromise, to really have the best language possible to do one very precise thing, which is describing Etel. Then since the beginning, it was going to be interoperable with existing tools because you can go to the Chinese company and ask them to support your brand new language. They will never they will never do that. So the compiler is able to generate its output. Netlist, as very long as you can also integrate legacy APIs inside the spine in Nigeria by using a black box system. It's a little bit like having a C header file, then application level start at the same level as an the actual very log or nearly the same level. But the thing is, and the top of the deal, you can build new abstraction level, you can build new tools a
nd it is its biggest powerful side. Then there is a flow. So basically you would have to define your description by using that scarified. Since then, you would ask Network Tool to generate the corresponding reaccelerating Netlist. Then you can grab you of that person, but then all together and you can use your flow as before by using same simulation tools and before and same synthesis tool. But then before. So, yeah, no, I will start with some examples or just some things, um, let's point to Tokyo. So spinless Dale. Will not create any overhead in the. You will not lose Gates, you will not lose performance because it is not the kind of issue, you know, if there is a divide where you've tried some not arbitrary, but you can provide some see a great move that will be translated automatically into space. So that is not that spin. That is really an approach where you have to define register a little bit as before and gates a little bit as before. Then all components key and all the names that are integrated area, which mean you can do your mission simulation as before with the wave you can look signals and match them with your description. It's not an issue at all. And OK, in fact, it's not really a language. It's what we call an internal data. So there is basically scatter, which is it is a scalar liberi. So there is a canard angry and Banerjee's and Liberi implemented on the top of it and it could and trying to have some language into another one. But in fact, this is probably one of the best part of the example. Um, yes, there is a simple example where you have some as common conditions to merge, to drive imex, to drive a counter, to drive another country with a reset value in which you would have to. If you want to do that, you would have to write three different process because you are in an event driven predications. Yeah, this is how you have to do things. It is really boring. It is already verbals. And as you can see here, you duplicate three times the same cond
ition, which is not very good in terms of good quality. And there is a equivalence in Spain in the first to define signals. It's already different than if you want to define this. Cabinda ultimately say I want Adbul, which is a hardware boolean that I type. Then if you want this registar, you say, I want all of this. Given that I type which that we sign up from, it's so it's not like in Vectron and very low where our register, I think that we can become our register. Because you assign it in that process, though it's not that here. It's really explicit definition. And this simple fact changed a lot of things. Like, for example, you can assign all those guys inside, inside the same if condition. So it is a random example. But basically it happened very often, like in a state machine where you have a pass and as a commercial path, you have to duplicate switch statement. And this is terrible in terms of quality. Then go for it for twenty eight line of Jagdale before to land line of final deal with Abitur explicitly expressivity so on. Yeah it's it's good then. OK, let's take another example. Let's imagine you want, you have FGB input and you want to calculate the grade level of those inputs by multiplying each of them with a constant coefficient. So yeah. Yeah I can see if I had three times the same pattern. Basically you have three time um and signals unsane signals and a floating point constant and then as output gets out the output of our register. So you have three times this pattern if you want to be smart in L and avoiding rewriting each time the same three times the same stuff, you can define a component which contains that. But you know, using and in fact that is really boring. It is very verbose. So it's not so good. But here you can use function. So let's take the um implementation. The final here we can define FGB value, then you can define a function which take as argument. How do I find value with Alabamian time constant and dysfunction. We return to the o
utput of to split up so you can see if I can. Defining intermediate register has Irag of Ebbetts then doing some fixed point calculation and returning it and then we using this function time. So yeah. Well and voila you have, you have functions, you have procedural, you have a task but you can't, you can't instantiate intro's function, arbitrary outwait. You still, you are still kind of stuck with a syntax that will limit you to give relationship between inputs and outputs by. Really, it's all the way, which is not very powerful, then, um, yeah, let's take another example. It is let's imagine you have a handshake. This, though, very simple with just are valid as m. misprision and are ready from safe to say stop. I'm not ready. Oh yeah. You can go. I ready and upload the you can see here and imagine you have two instance of those bits of tidbits like soothsayer's and sync and you want to insert a Q between those pieces if you want to do that, in which there you, you would have to write all this boring stuff. So like redefining or signals one by one of your and this time then you will have AZO to insult to FIFA, which is. Yeah it is boring. I mean you have to map into a vector or go goes one by one. So here we just have three elements. But I rocket in a company where in average we have like 20 signals. It's time to, to map into that are stricter. So yeah, it's not very great. Then here there is a first approach of how you can do that in Spain. So in Spain, like the handshake, this is name stream. So Astrium is a handshake boost that can carry an arbitrary data type. And here it is, an ad lib color with this phrase parameterization. So here you can define so sorry can define stuff. And I think we can stream of Adibi color of this parameterization. Then you can define a pfeifle like five, four, three, five, four, which would create this kind of data type with this depth. And here you don't have to bend. It signals one by one. You don't need to be in six. Basically you c
an directly access either of this pfeifle by saying five that I that push, for example, to access this bar of Bob to access this bar. And here, for example, it's saying, I want to take my soul stream and I want to connect it by using a fully conscious way, though direct connections in respect of that direction to the for your part, and then say I take the fight for your birth and I want to connect it to my think. The fall from twenty a line of work to seven line of it is good, but it could be better later. We see a better way then. OK, so here I think that we have an adlib that has stricter it come from the spine library and there is how it is defined like it is a case class which you name FGB with this parameterization for the construction of it diskless extend bundle bender represents the notion of that are structure in hardware. Then here you can define elements that you have in this data structure, although it is simple syntax. And for example, here is the definition of the stream concept. In original, though, this is still a case class we take as an parameter. The type then it takes an independent state representative district stricter with the concept of master slave, because you can take a history and say it is a master of my opponent and isolate part of my component, then can define find value it already has. That signals then the payload as an instance of disparities, principle, that type. Then you can implement the master function to say how it is that a structure could be set as a master or as a slave of a component. By saying that outputs are valid and the payload has input, you have the ready and then you can already do this kind of syntax and here comes the fun stuff. So basically, I told you before that binary is basically a library, which I mean here this is this is object oriented, which means you can add function in this in this class, like adding the combinatorial operator connection and the reverse one, which means the reverse of this one. And yo
u can as of, for example, add in this business definition a function that will, when you call it on Natrium, it will need to set a FIFO, connect this stream on the one you are calling it, connect it to the back part of this story of this Phifer and then returning the both of these FIFO. And there you go. You can you pass you you are moving from, um, discard as before, which you do everything by hand in financial to this card, which is only two lines like where you say, I have thought and I think we can stream of every color with this parameterization. Then I take myself I want to cue it with a faithful A16 element, and then I want to connect the output part of this effort to my thinking. And yeah, here we start to rise to the level of abstraction via going out of this mess of wayout, which is how that description things. So this is a simple example and there is many other funny things that you can do with tramp's. Like, for example, imagine you want to do this arbitrary hardware like you have a stream of color, then you want to drop transaction of this stream of color when they are black by adding this arbitration. And then you want to either by planning stages for performance reasons for us. I don't know if you want to do that. Um, yeah. If you want to do that, I don't know. It is, it is really boring. And if you want to do that, it's, it's only two lines. Like you say, I have a stream of color named source. Then you say I take this off and I want to throw it transaction when the source payload is black. And then I want to add pipetting stages and the end of it, and then I will name the original staging function. I think though, all this stuff here is infrared by design. So because if I want to be at a strictly about or definer is black function and these kind of things. So it could look like magic, but in fact it is pure aertel, because if you look like, um, how is implemented the trun function, you will fall on something which is pure attia. I mean it's not about
 adding magic things that to make abstraction for you, you can always look inside how it is done by using regular aertel like the turbine function where you can say can see it's instantiate, are it on stream of the same data type. Then by default he would connect this stream to the written stream, but it will in fact get there. They're undervalued and that's already by adding some additional conditions, like if I want to throw transaction's then but the force and then there is a true I mean, yeah, this is still Aertel so. Yeah, no, I would change the topic. Um, safety first. I mean when you do aertel, it's very easy to do bad things like infrared combinatorial loops across multiple module, inferring, for example, something that is by forgetting, assigning a comment or think that in all case and we check all those things for you. So, for example, this loop would be detected by the compiler or here's a result is not assigned by default. If this force, which we will infer, though, which I mean, if you successfully generate if you generate whose output ethyl. You have much more trust in this United States than in our handwritten one, because many, many things are already checked for you. There is some checks about cognomen crossing, which is them then basic obstruction, though it is a simple example of how you can opt out. What could be an abstract like imagine you need to do a communication module and you need a timeout inside it to check some things you can say. I want to create a timeout named Timeout, which is a timeout which will take after one thousand cycle. And then you can say if my timeout stick then I want to clear it though. But it is hardware. But as you can see here, you are using a function to to access our hardware in place of the timeout that counter equals zero. I use a function they would clear to. In fact, um, another example is if you want to control, which would count from zero to nine, can say I want to container of ten states, then you can say, I
 want to clear it, I want to increment it, I want to get its value, I want to get its next value. I want to know if it will overflow this cycle. I want to check if it's equal to five. I mean, just kind of things you can you can kind of have them with that and very large, but by using components and you know how components are going to use. And if you just say you want it and then you can use it as what you want, then oh yeah, total obstruction. I will add the top of that. It's not something it created in its compiler, which I mean, you can create those abstraction can define what what is a timeout or these kind of things. So functional programing, um basically function programing is something with which is big and at least one part of it. An example of just one part of it. Like if you want to infer this hardware where you have an address and array of addresses, then you want to check which addresses I was given K and then you want to know if one of them is true or you want to do that. You can say, I want to define address, which is a vector of these are the type four time. Then I can define the K and then can say I take my array of addresses and I want to create a new away from it. So you use the concept of mapping by and you give as a function that you want to use to translate those elements one by one to the next. All right. Or you can also use the radius concept of functional programing, like let's say I think that it's all right. And I want to reduce it to a single element by using this reduction function, which will be used on each element, each pair of elements to try to to reduce them until a single one. So it's kind of things that you can use very easily with Benilde. And yet this is a funny things, like basically, um, each time you use Binary Excel, in fact you are doing some Scarra programing by using spinach delivery and basically you use it. It would bring it into your computer memory, a graph of your design, which means you can also ask how this graph i
s currently to get some information of it. Imagine you have, um, A and B, both value sequence together which appear together. Then you have A which go through the calculation pipeline that you don't already know that I don't see. And then when there is bit of a come out, you need to add as a B value that were present at the same moment than the ever present that so you have to delay B by the same delays and this pipeline. And basically in order to do that, to to know how many of you have to use to to specify participatory style, you will have to count by hand. Megale, you have to run a simulations to look at the wave and just kind of things. But it's not very nice because if the if the pipelining latency change there, you are kind of annoying because you have to change things and maybe we forget to back. Yeah, but in Spain, Rexdale, you can ask, um, the Netlist to give you the latency between this point and this point, but using this function and there you go, the latency of this pipeline. And you can if you delay, um, by with a right delay, which makes your design much more elastic, which allow you to modify things there without having to care about this stuff. So I am as an example, this is more about what I mean is of a description like stopping doing aertel with each time signals and scanning of things. So imagine you want to define this state machine with a state that is a beast. I see with some conditions, like when you enter into Interstate B, you sets acounter to zero. Exactly. In B, you incremented, then an exit of it. You want to arrested to try to do that to do autistic machine. You can do that and splenetic there so you can use a state machine tool, which is again one thing which is on the top of it. It's not implemented into the compiler. So you can say, I want a new state machine, I want a different state A, B, C, which are state and A is the entry point, then can you find some signals and some stuff like that and then you can say Onstad and state to b
e an entry. I want to set my content to zero when state B is active. I want to increment my counter cycle and I want to check my quantize go too far. Then I want to go to state C and on exit I've said B, I want to, but I always lived through. I mean. This is really something to show you that there is not a fixed syntax, you can extend it, you can create new obstruction of the top of it, depending your challenges, could be really useful. Then let's take another example. Imagine you have designed a timer, a simple timer with a simple input, a simple, clear input, a limit to say when you timer will become full on output value. We can tell you when times are full and add value to get the current value of the timer. So there is a corresponding implementation of this component. Like you define a timer with some time mitigation, like how many bits you want for it. This class extant component to say yep, it is component, then you can define either of this component in new that structure by saying you have six, which is our input clear, which is our input bill. And yeah, simple things then can define cantell, you can define the value of your components and then OK, you have it, you are happy and you want to map it into something already existing. You want to, you want to from every memory is like the one you want to be able to set a limit of the timer. You want to be able to define which signals we'd be able to make you automatic. It's going to things to do that it's been in there and you will probably use some switch statements and these kind of things. But here there is another solution which is really using obliterated programing. So basically there is a tool named Bisley Factory, and this tool is abstract, which means it is an abstract class and it's defined how it defined function that will allow you to define the mapping between a memory and some rest of your design and user is multiple implementation of these tools like an arbitrary one, another one and an excellent o
ne. And there you go. OK, so as instance, in our time, our component in the bendir that are strictly defined are you can add a new function that could be used to say, I want to drive this time a component from memory abuse. So factory at a given base addressing the mapping of this space. And you can also specify a list of signals which could be able to make you automatic can as give a list of clear signals to say that they can create. And then you can say, I want my controller to be able to drive and read the limit of my time at the base at zero. So basically, yeah, here you are saying that the upper limit is our register of TACE Bisley factory that you can access as a zero and you this will be able to read it, but it will also take the control of it to be able to drive it then can say you want you you want to be able to. Set the clear flag of the timer when the controller is rattling the base of the zero. So, I mean, this kind of abstract definition of regular mapping allows you to not care about this time. Things like you don't need to know that Abib timings the AvalonBay stymying ACSI, Furbies timing. You know, not you don't have to know how the bills work. To create a custom peripheral, which is very interesting, because it means this function is abstract, you can use it with an Avalon base and purpose without having to create kind of bridge by yourself to map into a fixed definition. So there you go. There is an example how you can use all that stuff you want to create a big time component with a preschooler, with one timer and these kind of things. So you can define, for example, an APB Trabis with this metaphysician. Then can you find some signals? Then you can say, I want a preschooler of 16 because I want a timer after a it. I want a time A, B and C of 16. But then you say you want to create this IPB previously factory, which will be able to map the IPB trip is defined there to some other. And then you can say if I can pull I want I take my tamasi, I want t
o be able to drive either of this Tamasi with my Piscatella at this address in the mapping. And there is a list of things that I could be able to make it tick, and there is a list of things that I could be able to make it clear. So. Yeah, it is it is very short, I mean, it is really I mean, it is very expressive. You say, I want I want that. I want that. I want that. I want to connect them back this way. And this is done for you. You don't have to play with wire by hand and by hand and all these things. It is very flexible. And if you want to edit it, you you can't introduce Arberg inside it. I mean, you don't have to play with timings. You don't have to play with all the things, then. Yeah, it is a project which was made with by next year, which is kind of a little microcontroller with a risk, five c.p.u with instructions, with instruction, cash with an extension and just kind of things with duct tape, um, to get by using see we are using Breakpoint and things like that. There is a is there a memory. There is, there is an XY, uh, for crossbar to connect all those guys together with a good buddy. There is an APB, three Brees Bridge to go to peripherals. Which are your time. Are you out of control? And basically there is something interesting is the implementation of this design. As instance, the IPB decoder, though, to try to install T.S.A.. So it is used for control of five lines, though. But I've already talked about these kind of things before, but for example, to instantiate and create all those connections between between them and I. What defines a mapping of Auto's in this arbitration? This is use that like you say, I want an APB Trittico the semester is AVP Bregier you IPB, so DKA and there you can give a list of slave like that you are there are you people you will be mapped at this address with this memory renge. Then another example is how, um, yeah, this thing is made so that actually for crossbar, which connect or does go together. So here it, you then b
uild a pattern from object onto the world. So basically you can say, I want to create an axis for a factory and then you will you kind of fit that model in this tool to say what you want. And when you have this tool is what you want to say. It's all right, you can build yourself and the tool. We do what you want. Then I think simple it is to have the FIDs list of slaves, like saying, I have the ram ram, I have an rage rachmat at those location. Then you can say there is, for example, controller which should be able to access it as the RAM controller, your Yuxi and just get off things and yeah it's nearly has is it than to use those things are KISS's things but it's still. PUCA without using graphical GUI, then, yeah, about Scarra, uh, basically, yeah, sculler is probably a very good general-purpose languages then if you want to test it, there is already some idea we can use which can help you like to have to have syntax error, highlighting, refactoring, these kind of things, navigation tools which are very useful with EMAC plugin. And yeah, so it is, as I say, completely opensource. You can find some documentation there. There is some ready to use project with some directive how you can install tools and you can think so. Yeah. If you want to try it. That already goes there. There is also some communication channel if you have questions like architecture, but uh, do not hesitate to make the issue. If the compiler has some strange things, it could happen, but it is pretty up now. And if you want to talk me in cremator is my email address at the. Thank you. Thank you very much. We have some time left for questions and answers if you want to leave the room now. That's OK. But please be quiet and take some trash with you if possible. In order to ask a question, please line up at any of the microphones and I will call you out. Yes, please. Uh, hello. Thanks for your talk. I was wondering. So now we have this very high level description of of our hardware. So what is the 
debulking story like? So if something goes wrong, do we have to look at the video code or is there some kind of high level debugging mode that I can use? OK, the first for instance, I could take example, the for example here, if you have a problem in this drive from function, like the mapping is not working correctly. So integrated vector, you will still keep Ya'acov components and names that you use, like, for example, this timer here, we take those names, things like that are here. The logic used a little different there. If you define a signal for complete dysfunction that there is a name will be kept because this function written on an area which so. It's not very difficult, though, because, yeah, it's to keep them and there is something it is the fact that, you know, if you use this kind of obstruction, they're like traumatization when something happened and please at a pipeline to those because those functions were already verified by somebody else. And you don't have to rewrite it each time by hand. You can kind of type what you think. And it carried you from directly because because you are using a more abstract way to define the hardware. You have much less bucks coming in your description. And really sometimes it's really unbelievable. Like, you know, when you are doing work, then it never work the first time. But by using the ZAPORA really sometime it happen already. Sometimes it is surprising, but yeah. Then you can take a look at that if you are really not sure. And there is something strange. So the United Way is not crap. It is readable. If you talk about your single name, you will find it. It will still keep the same. If you use one statement, you will still try them integrated with Excel. So it is not a mess. It is right. But normally you don't have to go into the Excel. You will still have points where you can prob signals and that would be right. Thank you. Question in the front. Hello. Um, nice. Um, 4:00. Uh. Um. No. Ever heard of, uh, a system l
evel design languages like System C or spec C because so do a very similar approach to the problem of raising the level of. Was the level of a lot of them, so, yeah, I have heard about EMC and those I went back. Yeah, sexy. I don't know about sexy, I don't know about it. So about EMC. So much. OK, you can use I know that you can use many features or like or features that you want when you are using EMC for different things. But then for think visible things I am really not sure that you can use or crazy features of EMC, but I am not an expert and I want to say crap. But I think EMC, when you want to come back to cities, is things you will have to use since it is synthetic is much more restrictive and maybe not so much powerful, but maybe I'm seeing some crap. Oh no you don't. But it's similar to some things you only can use while simulating the whole process. You are still using sensitivity and these kind of things, right? Yeah, but you don't have to use sensitivity. You can also use fifers for the vocal communication or you can introduce some biases very um. Common to your approach. Yeah. Which I really like raising the level of abstraction to make everything easier. So you don't just have to synthesize it down. OK, thanks a lot. Thanks. We're taking the next question from the very back. Can you compare it to Chisel, which is also skull based and also a high level synthesis tool? Yeah, OK, so basically before starting from Delaware using K2, but I move away from there because of some bad feelings that I had, though I don't want to be to be to to touch either. Um, but there is really many features that are not working well in it. Like for example, you don't have the you can't use kind of them and support, but not really. It didn't work very well when I used it. And for example, you are still forced to use Synchronoss reset, which are active high diskette, I think. I mean, it's I mean the team behind Kaser from Maine opinions focus on their needs are not seeing Shiza
 like are tools to solve problems of everybody. Things are things they hate what they want. They don't go further. They don't polish it enough from my point of view and really know is there are really much more happy with it because, yeah, I have a page of my documentation which is talking about the difference between Israel and Israel. And there is really a lot of little things, little issue with but which we completely break Chastel if you really want to use it in a productive environment. And about the synthesis, you mean you have a question about is it is this right? Um, no, I just mentioned that was it to. But speaking of the differences, wouldn't it make more sense to just Chastel to address those differences instead of working it? Oh, I try to, yeah. OK, now, first time I started to understand how that could work behind the scene and then come back to hazal and fix it. But yeah, it really appu very fast. That wasn't possible at all. I submit some fixes and may get who were remaining and where they are without any interaction with the team they'll fit back. So it was a development process issue maybe from the team. I tried very. I tried. All right. Next question from the front, please. Yeah, I think we all know the concept of IP cause with a standard HD we have. And how did you think about a review process of the library that is building with Spinell and how could that happen? So you say you don't want to rewrite code every time, so we have to reuse it and how can we review it that that is good code, that this is OK? Basically, this is probably the next announcement that I really have to do. And it is really something critical and complicated, because when you have done something in the library which has that, you don't have to go back and remove pectus that you have added, though until now. What is documented and unlike the competition, could be interpreted like safe, like using stream to do things is safe because I already but many attention if it in it. But
 yeah, there is some work to do on the additional library will come directly with Binaggio and it will be one way of expression until now are really focused on spinning things onto cars and the library is the next step to go further. OK, next question from the front please. As is possible, which apparently she had to create clawless logic or sequence logic, crotchless logic like you mean you don't have a fixed clock handshake everywhere between every year, like and. Yeah, like all the logic, everything. There is absolutely no clock, no flip flop, no flip flop everywhere into your design. So. No, no, sorry. Yeah. I also wanted to ask you about another tool. Can you talk about the relation, the relation between your system and Blue Back that's based on Haskell and it's been fairly heavily taken up by Amity and worked rather well on things like eight to six counters. So I personally, OK, I hear about respec, but I don't really know about it. Um, I can't really talk about it. Sorry. All right. Any other questions now? Is your chance to have any questions from the Internet? All right, if anything comes to your mind, please find a speaker afterwards and before you leave, please take the trash out with you. With that, let's give a final round of applause, Tushar. Thank you.