PULP Community
Role of gapy, list of peripherals and capabilities of gvsoc - Printable Version

+- PULP Community (https://pulp-platform.org/community)
+-- Forum: PULP's Community forum (https://pulp-platform.org/community/forumdisplay.php?fid=1)
+--- Forum: PULP General questions (https://pulp-platform.org/community/forumdisplay.php?fid=2)
+--- Thread: Role of gapy, list of peripherals and capabilities of gvsoc (/showthread.php?tid=303)



Role of gapy, list of peripherals and capabilities of gvsoc - nanoluka - 11-21-2022

Hello,

getting acquainted with PULP platform these last few weeks - so, first of all, a big thank you and a bigger congratulations to all the creators and contributors.

I haven't had prior experience with tools such gvsoc, so I am bit troubled by trying to wrap my head around where are its limits, actually - hence this post. Please, any clarifications in this discussion would be of great help.

First of all, I've seen the videos from pulp training:
  1. Understanding and working with PULP
  2. GVSoC / Dory Tutorial
  3. A Deep Dive into HW/SW Development with PULP
and I've downloaded the VM and played a bit, followed along the steps demonstrated in the GVSoC/Dory video. All works great - I got the instructions dissasembled, saw the waveforms.

Now, I am getting confused with gapy... what is that, actually? It is mentioned, listed as a tool, but its purpose eludes me... I tried looking for other resources online, but I couldn't form a picture. At first, I though that's a python library that serves as a sort of a glue between the RTL pieces... at some point in the video, it is spoken about python generators... is that it?

In the next video (A deep dive...), I see that IP dependencies are treated using a tool called IPApprox, however - that was back then, while today this is the task of bender, if I am correct. However, where is this list of IPs? In the video, there's a subdirectory IPs of the pulpissimo repo, but I don't see it there: https://github.com/pulp-platform/pulpissimo

Finally, this gvsoc - if I am getting the idea correctly, it is a cycle-accurate simulator, meaning that it can simulate execution of RISCV instructions on a PULP hardware and yield dissasembled instructions, signal waveforms and metrics, such CPI. However, is it a stone carved thing, in the sense that it can simulate only a predefined configuration of pulpissimo SoC? In other words, can it be changed without QuestaSim so that simulates execution of a PULP program on an SoC configuration with SPI and without UART, say?

I think I am pretty sure that, if I want to add novel, arbitrary RTL, then I must have QuestaSim. But if I want to play with pulpissimo SoC configuration (adding or removing some of the existing peripherals), can this be done without QuestaSim, just using gvsoc? It seemed to me that the part where (in the lecture GVSoC tutorial) it is shown how to run with and without cluster is the response to this, but - I didn't get how to exclude uart and then include spi, for example?

Thanks!


RE: Role of gapy, list of peripherals and capabilities of gvsoc - kgf - 11-21-2022

Thanks a lot for the post. Quite a bit there, I'll try to answer a few:
- We have moved to "bender" for the most part instead of IPApprox recently.. that is correct. However the build scripts should execute this automatically
- The IPs will be downloaded form git recursively. You can see the list in Bender.yml
https://github.com/pulp-platform/pulpissimo/blob/master/Bender.yml
Some of these will also start loading additional repos (i.e. pulp_soc...)
- GVSoC as you mention is a simulator so that the entire SoC can be emulated without running RTL simulations. It will accept different configurations, but there are some 'tested and known' configurations. However, there is no 'real' difference between a configuration with/without (say) SPI.. if you do not use the SPI, you do not use it.. it does not contain, area/power contributions for these additional components.
- Unfortunately, stripping some components (at RTL level) from PULPissimo is not always so trivial (some components need to be involved in it). To make this easier we are contributing to something between PULPissimo and PULPino together with our friends at EPFL, LowRISC and OpenHW. It is still under development but you can follow it here (https://github.com/esl-epfl/x-heep)
- Adding/deleting components would make sense at HDL level if you want to build and see how your things work. Otherwise GVSoC is OK to play around with a setup.


RE: Role of gapy, list of peripherals and capabilities of gvsoc - nanoluka - 11-24-2022

Hi, thank so much for taking the time to respond.

Quote:- We have moved to "bender" for the most part instead of IPApprox recently.. that is correct. However the build scripts should execute this automatically
- The IPs will be downloaded form git recursively. You can see the list in Bender.yml
https://github.com/pulp-platform/pulpiss...Bender.yml
Some of these will also start loading additional repos (i.e. pulp_soc...)


Still, what is gapy? And, even better, what do the "python generators" do, where are they?

Quote:- GVSoC as you mention is a simulator so that the entire SoC can be emulated without running RTL simulations. It will accept different configurations, but there are some 'tested and known' configurations. However, there is no 'real' difference between a configuration with/without (say) SPI.. if you do not use the SPI, you do not use it.. it does not contain, area/power contributions for these additional components.

Right, makes sense - what does a software binary care if I access its part or not ("its part" being the piece of code that simulates the execution of SPI-related instructions). Still, what are the "tested and known" configurations - is there a list? 

Thanks, again!