Replies: 48 comments 24 replies
-
Hi @steveicarus, I'm pinging you to make sure you see this :) Around January, the FOSSi Foundation asks for project ideas. There's still a lot of time before then, but time goes fast, especially in December. It probably makes sense to prepare a project idea a bit earlier if the intend to participate in GSoC is there. If I can help in any way, please let me know. |
Beta Was this translation helpful? Give feedback.
-
Where is community to put money on icarus on these days. |
Beta Was this translation helpful? Give feedback.
-
What do you mean, @red0bear? While I agree with you that people should contribute when they can, be it with money, by opening bug reports or by writing code, I don't see exactly the connection to GSoC? GSoC is sponsored by Google to allow students, and more recently even beginners in open source software development, to contribute to projects that interest them under the guidance of mentors. It allows students to dedicate their time during the summer to open source projects without having to worry about finances. Of course, Google isn't doing this because they're just being nice, but because they too rely on open source software to a large extent ;) In summary, participating in GSoC does not cost Icarus any money. It allows students to dedicate their time working on Icarus while being guided by a mentor. I hope this made it a bit clearer. |
Beta Was this translation helpful? Give feedback.
-
Google never was nice with anyone in globe. If they are good people icarus could be added there long time ago. Work with this is very frustrating. But what make things good is when community put money on it instead ask for a big corporation to do it. But thats only my personal opinion. |
Beta Was this translation helpful? Give feedback.
-
I have mentored GSoC projects for Icarus Verilog in the past, but I don't have the bandwidth to do so this go-round. If you can round up someone willing to do the mentoring, I'll gladly look at and approve any project you want to don. |
Beta Was this translation helpful? Give feedback.
-
@caryr has worked on the SDF part of things, so I suggest that you ping him to see if he's willing to mentor you. (He as also done GSoC mentoring in the past.) |
Beta Was this translation helpful? Give feedback.
-
I may be able to mentor, but have been very busy with work and the rest of my life the last couple years. I remember you talking about the SDF improvements in the other PR. Lets start with figuring out what you think is critical to implement, because some of this will require significant improvements in the VPI interface and VVP internals to allow the SDF annotation to work properly. Also I would prefer someone else drive getting us sponsored. I can act as the figure head and mentor of record, but expect to continue to be very busy for the first half of next year and likely longer. I should have some time over the next month to work on a proposal, but I want to make sure this is successful for the student so this may require those of with more experience to help out with the VVP internals. @steveicarus this is likely where you would be most helpful/needed (e.g. wire delays and how those get placed relative to the drivers). I think as a team we could make this work, but I don't think it is something I can support entirely on my own. We also have to be ready to support related bugs as we start more completely testing gate level simulations. I think we are in a relatively good place and SDF annotation is the primary limitation, but we do need to make sure other items do not get in the way of the SDF work. |
Beta Was this translation helpful? Give feedback.
-
Another candidate for GSOC work is there are a number of items missing to allow proper mixed signal modelling, but this is likely a multi year project where different pieces are implements. I have bits and pieces of this started, but the big missing item is unpacked structures along with nettypes and efficient resolution functions. Think of a Thevenin type with a drive voltage and resistance that is an unpacked structure with two reals. You then need to be able to declare this as a nettype and give it a resolution function to resolve multiple drivers. The resolution function is written in Verilog code, but needs to be very efficient when executed since it is run each time one of the driver nets changes a value. Adding DPI support while not required would also be nice. |
Beta Was this translation helpful? Give feedback.
-
Thank you @steveicarus and @caryr for your replies. I understand that there is only so much time available, and mentoring takes up another chunk of that time. But I also don't think that I will need full-time mentoring, just someone to point me in the right direction. It would be great if you caryr could be the official mentor of the project. I completely agree that it would be good to have multiple contact persons so that the individual load decreases and I can ask my questions more targeted. Maybe there are a few more people who are familiar with the internals of Icarus and wouldn't mind answering some of my questions from time to time. On to what I think is important to implement: I had a look at some SDF file generated by the OpenLane flow. The missing features are in line with your comment on #746. There are three categories not yet supported in Icarus:
As an example, I have two SDF files generated from one of my designs. One for the SKY130A PDK and the other one for the GF180 PDK: wfg_top_sky130.sdf (wfg_top_sky130.zip) wfg_top_gf180.sdf (wfg_top_gf180.zip) From what I see in
Both SDF files use timing checks that would be ignored initially, but if there is enough time, an implementation for the following timing checks could be considered: Timing Checks:
All in all, the rough order of work would be as follows:
If possible, I would really like to work on SDF support :) Of course there are also interesting topics like AMS or DPI support, but for me personally SDF support would be the most interesting to work on because of the ongoing OpenMPW shuttles and the recent releases of open source PDKs. |
Beta Was this translation helpful? Give feedback.
-
I'm sure we can come up with enough time to support you to be successful. Like I said previously I'm okay being the mentor of record. I will certainly need some help from others, but I don't expect that to be too much of a problem. Have you verified that Icarus parses all the SDF files and generates appropriate warning messages or are there constructs that cause errors? If there are other errors do they fall into the existing categories or are there other missing constructs? |
Beta Was this translation helpful? Give feedback.
-
That sounds great :) I'm looking forward to working on this project. I haven't checked it by simulation yet, which I should have done in hindsight. I have now run a simulation for Icarus parses the file and generates warning messages.
And other warnings in the form of:
Which I am not sure if they are issued due to the unimplemented The entries for
The instantiation of
There are also no warnings issued that timing checks are not yet supported. This would be another point on the list, to first add a warning for unsupported timing checks. I have also tried to simulate for GF180 but I did not yet manage to do so. There are some missing modules which I can not find anywhere in the PDK. There are also no example simulations available from Efabless' side yet. I think it makes sense to focus on SKY130 at the beginning. |
Beta Was this translation helpful? Give feedback.
-
If all you see is warnings then it is something I have looked at in the past and I usually remember the issues I was facing in the implementation once I start to look at the code again. Timing checks are currently removed by the compiler so I think the SDF annotator may incorrectly silently drops them. Adding an appropriate warning should be trivial. I think the modpath issue is rooted in the conditional path delay limitations even though this specific instance only has a single path. My guess is the simple cases like this you can implement first and then enhance the code to handle the more complex cases. Trying to get two larger examples to test with is good. Also look at the existing SDF tests to see how those were implemented so you can understand the methodology. |
Beta Was this translation helpful? Give feedback.
-
I see, you previously took the time to turn the crashes due to unsupported features into warnings. Adding a warning for timing checks may then be a good starting point to familiarize myself with the codebase. Yes I agree the SDF file from the GF180 process node would also be very useful for development. I will make sure that I get it to simulate, at the latest by the start of the project. I will take a look at the SDF tests in Icarus. Regarding the organizational: I just saw that the FOSSi Foundation requires at least two mentors listed. While many projects from 2022 only have one mentor listed, I think it would be better to list two as per the FOSSi Foundation GSoC House Rules. Would it be possible to add you @steveicarus alongside caryr to the mentors list? Just for the official part of course. The application seems to consist only of a PR in their Git repository with a description of the project, skill level, duration, language/tools and the mentors. I would like to do the project with a time commitment of ~350 hours. Please see the PR for last year's GSoC ideas: fossi-foundation/fossi-foundation.github.io#52 Caryr, you mentioned that you have time to write the proposal in the next month. So you would be handling the project submission to the FOSSi Foundation? |
Beta Was this translation helpful? Give feedback.
-
I believe they like to have two listed mentors so that if one needs to drop out for some unforeseen issue the student will not be negatively impacted. Yes, reviewing the existing code that implements the current SDF annotation would be very beneficial. I try to leave comments regarding what I am working on and the basic issues I was facing. Reviewing these, understanding how the existing code works and understanding the basic work needed to finish the implementation will significantly improve the odds of you having a successful project. I think most of the parsing is complete, so you will primarily need to work in C/C++. If you feel comfortable using these languages then it sounds like we have a good fit. I will start getting the proposal together next week. I will likely post it here for commenting before officially submitting it to the FOSSi Foundation. |
Beta Was this translation helpful? Give feedback.
-
Yes, I expected to work in C/C++. Awesome, thank you! |
Beta Was this translation helpful? Give feedback.
-
I believe that may be the case. We only add back annotation hooks related to the SDF file. Does the standard specify that ``celldefine` has this functionality? |
Beta Was this translation helpful? Give feedback.
-
Also, by default we ignore all specify blocks, so make sure you are actually including them. If they are not included we should also skip the SDF annotation. Of course there should be a warning for this. I hope once you work is complete we can enable SDF/specify by default. |
Beta Was this translation helpful? Give feedback.
-
I think it has some because the delay scheduling gets more complicated, but things have changed significantly internally so it may not have the same implications it once did. You may want to benchmark and let us know. |
Beta Was this translation helpful? Give feedback.
-
I have been reflecting on your project and I want to make sure you don't loose focus which is easy to do when you are early in a project and you have a significant amount of time before the project is over. Reading and reorganizing the documentation is/was a good thing, but that is not part of the proposal or a significant item you will be evaluated on. The same applies to code reorganization. These are distractions from your primary SDF work. My suggestion is to start focusing on the code. I would start with the either the SDF annotation or parsing the specify blocks in the RTL and make sure it correctly recognizes and for now ignores the missing constructs with an appropriate warning. As you are implementing this start thinking about what is required to implement the missing functionality to meet the requirements in the standard. Then implement one of the smaller items or the simple case for a more complex implementation as you refine your thinking of how to solve the problem in general. The goal of your project is to correctly parse and back annotate designs using the open source tools and libraries. I will still consider your work a success even if you do not have this 100% implemented because I have a fairly good idea regarding what is needed to implement all the functionality and you may not have enough time to fully implement all the missing functionality, but you will also need to implement significantly more than wire delays and support If you do not understand something or have no idea where to start please ask. I may not be able to explain exactly what you need to do, but I likely have a general idea regarding what and where things need to be implemented. To me, part of GSOC work is figuring these kind of things out. It's more than just coding what someone else has architected. I have started reviewing the existing specify/SDF bugs and have some ideas regarding changes in the code that are needed to resolve them. I will try to add my thoughts to the various tickets when I have time. |
Beta Was this translation helpful? Give feedback.
-
Short update: I managed to create a proof of concept where the delayed reference and data signals become copies of the original reference and data signals. This works for both I will clean up the code and open a PR on GitHub for further discussion soon. There are certainly some things you will tell me to change and I have some questions too ;) |
Beta Was this translation helpful? Give feedback.
-
I have researched what will be required on the VPI side to implement SDF INTERCONNECT. Here are my findings so far. VPIIcarus Verilog needs to support the Also
The question is how we can get the ports by their names in the SDF file?
So we just get all ports via
So port While iterating over the ports we check if a port has been found with the correct name and width. Inside vvp the class for ports is called vpiPortInfo and gives us information over:
Next we need to check if the ports belong to the same net. How do we do that? I am not quite sure yet. But once we have verified that both ports are connected over the same net, we will create a Finally, we would set the interconnect delays via At the moment I'm not quite sure how to implement everything. But I would suggest to start with the VPI code to access the ports and find a way to find the common net. After this is done, I can focus on implementing Some thoughts I had on this were: An InterModPath is different from a ModPath in that it does not exist until it is first requested. ModPaths are explicitly added via specify blocks, but we don't have an equivalent mechanism for InterModPath. This means that we have to create InterModPaths on the fly. The idea is, once an InterModPath has been requested for two ports, to get the the net between the two ports and insert a
@caryr what do you think of the VPI access and my idea to implement the interconnect delay? Do you have any idea to get the common net between two ports? Thanks! |
Beta Was this translation helpful? Give feedback.
-
Hi @caryr, I am able to fully annotate a simple design with buffers connected in series, but I get into problems when one signal drives multiple buffers. Currently the way I insert an interconnect delay is the following:
This works well when the buffers are connected in series:
At first a Problem with buffers connected in parallelThis approach does not work anymore when multiple buffers are driven by the same signal: Here is a simple design with three buffers in parallel, where different interconnect delays from input
Here is a snippet from the netlist created by VVP.
If I now try the same approach as before, I always get the same When enabling
ProposalMy idea to solve this particular problem is to add a This will improve the following points:
The netlist would then look like this:
As you can see, the connection to each module is through a The VVP code generated for one of the buffers currently looks like this:
I would propose to change it to this:
All input/output signals go through the At this point I may need some help from you: Since I don't have much experience with the code generator yet, could you tell me if it is generally possible to output the code like this, or is there something I haven't thought of yet? I am open to any suggestion regarding this implementation. Performance ImplicationsWhat are the performance implications for designs that do not use SDF INTERCONNECT? For each module instance there are now I would suggest implementing the feature first and then evaluating the performance impact. If it is high, then interconnect support could be disabled with a command line flag. If it is low, it might be worth leaving it enabled by default. That's it for now! PS: Reminder to submit the midterm evaluation |
Beta Was this translation helpful? Give feedback.
-
@steveicarus any thoughts? I will try to look at this in more detail soon. Evaluation completed. |
Beta Was this translation helpful? Give feedback.
-
Some updates from my side: I tried to find other solutions to add connection delays, but I still think adding functors to the inputs and outputs is a good option. But I realized that we don't necessarily need to create a new functor, a BUFT will work just as well. And as it turned out there is already functionality in VVP to add a BUFT before inputs. The With this change, I am able to annotate the interconnect delays for the example with the three parallel buffers. |
Beta Was this translation helpful? Give feedback.
-
I've been looking at the code and trying to think of alternatives. I don't see an obvious alternative. The most obvious enhancement is to only add the extra drivers when they could possibly be needed. Specifically when it is possible that a Have you had time to look at the average change in the time needed to run the test programs if this functionality change is enabled or some other larger circuit simulation and how it is impacted by the change? Knowing the percentage change impact would be useful information. I was hoping @steveicarus would have replied, but I don't think that will happen in a timely manner so we need to just make our best effort and deal with any suggestios if/when they come in. |
Beta Was this translation helpful? Give feedback.
-
I assume this is the version that is making the change for all modules so there may be room for some improvement. Also are there any cases where there are now double buffers that could be optimized away? I will admit I was not expecting the performance degradation to be quite as high, but you can't argue with measurements :). Good job in your sleuthing to root cause #985. That sounds like a subtlety that would exist in the code. Can the building code be changed to insert at the head for the src paths and at the tail for everything else? This is changing the core part of the simulator so we need to be mindful of both persistent compute and memory overhead for any change once the build stage has completed. |
Beta Was this translation helpful? Give feedback.
-
@caryr, I managed to fix the remaining annotation issues in #973 PR #973 is therefore ready for review and awaits your comments. There are still some improvements to be added to the SDF INTERCONNECT feature, namely support for input/output vectors, but I would like to add this in a follow-up PR so that #973 doesn't accumulate too much code and functionality, making it much harder to review and maintain. I will take a break from coding next week so that I can continue motivated and re-energized the week after. Once SDF INTERCONNECT is in good shape, I would like to invest some of the remaining time in timing checks. They are essential for timing simulations, because nobody wants to check timing in waveforms by hand ;) |
Beta Was this translation helpful? Give feedback.
-
With the latest PR #994, it is now possible to annotate interconnection delays for input/output vectors. I will continue my work by looking at implementing the |
Beta Was this translation helpful? Give feedback.
-
Moving the discussion about SDF messages from #994 to here:
|
Beta Was this translation helpful? Give feedback.
-
The final project report has been published here: GSoC23 — Final Project Report |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Recently, GSoC 2023 was announced. It would be great if a project for Icarus Verilog could be submitted.
I already talked in #746 about how this could work, but I am opening this issue for greater visibility.
FOSSi Foundation
The FOSSi Foundation is an umbrella organization for GSoC. Their list of previous project ideas shows that a project based on Icarus would fit in pretty well.
Submitting a project via the FOSSi Foundation would reduce the admistratice burden on the mentor as written on their website.
Mentor
There needs to be a mentor available for the project who has at least 2 hours a week available for mentoring.
For more information see the FOSSi Foundation GSoC House Rules.
Project Idea
I personally would like to work on the SDF support of Icarus. The ultimate goal would be to get Icarus' SDF support in a working state for the OpenMPW program. This is a worthwhile goal as the program becomes increasingly popular and now covers even more PDKs.
Please tell me what you think about all this :)
Beta Was this translation helpful? Give feedback.
All reactions