Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for preloading #104

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

Add support for preloading #104

wants to merge 5 commits into from

Conversation

FrancescoConti
Copy link
Member

Add (back) support for preloading L2 and L1 memory in RTL simulations. The "best" option might be to rely on information directly in the SDK, but in this PR instead the strategy is to rely on an external mem.json file distributed together with the PULP RTL, inside the ROOT/sim folder of each given PULP chip, to describe the memory architecture.
For example, the typical architecture of a PULPissimo SoC with 32+32 KiB of private L2 and 448 KiB of shared L2 divided in 4 word-interleaved banks is described as follows:

  {
      "pri0": {
          "base"   : "0x1c000000",
          "length" : "32768",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/bank_sram_pri0_i/sram",
          "interleaving": "None"
      },
      "pri1": {
          "base"   : "0x1c008000",
          "length" : "32768",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/bank_sram_pri1_i/sram",
          "interleaving": "None"
      },
      "l2_0": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[0]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "0"
      },
      "l2_1": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[1]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "1"
      },
      "l2_2": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[2]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "2"
      },
      "l2_3": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[3]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "3"
      }
  }

The SDK will automatically generate one file for each JSON dictionary entry inside vectors, but keep the JTAG loading method by default. To switch to preloading, one can set the bootmode env variable on the fly while calling the Make command:

  make all run platform=rtl bootmode=preload

da-gazzi and others added 5 commits May 21, 2021 00:29
…TL sim

The correct generation of preloaded data depends on a mem.json file that
is located inside the ROOT/sim folder of each given PULP chip, and describes
the memory architecture.
For example, the typical architecture of a PULPissimo SoC with 32+32 KiB of
private L2 and 448 KiB of shared L2 divided in 4 word-interleaved banks is
described as follows:

```
  {
      "pri0": {
          "base"   : "0x1c000000",
          "length" : "32768",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/bank_sram_pri0_i/sram",
          "interleaving": "None"
      },
      "pri1": {
          "base"   : "0x1c008000",
          "length" : "32768",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/bank_sram_pri1_i/sram",
          "interleaving": "None"
      },
      "l2_0": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[0]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "0"
      },
      "l2_1": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[1]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "1"
      },
      "l2_2": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[2]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "2"
      },
      "l2_3": {
          "base"   : "0x1c010000",
          "length" : "458752",
          "instance": "/tb_pulp/i_dut/soc_domain_i/pulp_soc_i/l2_ram_i/CUTS[3]/bank_i/sram",
          "interleaving": "4",
          "interleaving_bank": "3"
      }
  }
```

The SDK will automatically generate one file for each JSON dictionary
entry inside `vectors`, but keep the JTAG loading method  by default.
To switch to preloading, one can set the `bootmode` env variable
on the fly while calling the Make command:

```
  make all run platform=rtl bootmode=preload
```
@FrancescoConti
Copy link
Member Author

A similar PR should be prepared also for pulp-runtime.

@FrancescoConti FrancescoConti self-assigned this Jul 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants