Welcome, Guest
You have to register before you can post on our site.



Search Forums

(Advanced Search)

Forum Statistics
» Members: 474
» Latest member: Raj
» Forum threads: 136
» Forum posts: 461

Full Statistics

Latest Threads
Modifications of the HERO...
Forum: PULP General questions
Last Post: Olivier
24 minutes ago
» Replies: 0
» Views: 3
32bit data loading
Forum: PULP General questions
Last Post: RiscV
07-03-2020, 09:53 AM
» Replies: 0
» Views: 31
udma memory to memory dat...
Forum: PULP General questions
Last Post: RiscV
06-30-2020, 04:15 AM
» Replies: 2
» Views: 89
Running programs on Zedbo...
Forum: PULP General questions
Last Post: Raj
06-29-2020, 02:33 PM
» Replies: 2
» Views: 114
Data relocation when usin...
Forum: PULP General questions
Last Post: LPLA
06-29-2020, 02:20 PM
» Replies: 4
» Views: 394
Questions regarding Runti...
Forum: PULP General questions
Last Post: heavySea
06-29-2020, 01:00 PM
» Replies: 2
» Views: 183
Target options for PULP R...
Forum: PULP General questions
Last Post: mehrdad
06-06-2020, 12:44 AM
» Replies: 2
» Views: 498
Some questions about the ...
Forum: PULP General questions
Last Post: Olivier
06-04-2020, 03:38 PM
» Replies: 0
» Views: 272
Pulpissimo prepare standa...
Forum: PULP General questions
Last Post: bluewww
06-03-2020, 03:08 PM
» Replies: 3
» Views: 867
The status of Ariane ARA ...
Forum: PULP General questions
Last Post: kgf
05-26-2020, 08:51 AM
» Replies: 1
» Views: 458

  How to find the signal which represents 16bit instructions in the design?
Posted by: ninipa - 04-26-2020, 01:37 PM - Forum: PULP General questions - Replies (2)


I'm trying certain software debug tool on pulpissimo. To build alignment between source code and disassembly, I need to trace both "pc" and the corresponding "instruction" in the design during runtime.
I've found the "pc" shall be "tb_pulp.i_dut.soc_domain_i.pulp_soc_i.fc_subsystem_i.FC_CORE.lFC_CORE.id_stage_i.pc_id_i[31:0]"
And probably the "inst" shall be "tb_pulp.i_dut.soc_domain_i.pulp_soc_i.fc_subsystem_i.FC_CORE.lFC_CORE.id_stage_i.instr[31:0]"

For example, on "hello" case, a piece of disassembly is:

The waveform is like:

you can see when the instruction is 32bit, disassembly is matched with waveform (eg. pc=0x1c008130, inst=0x82f72a23)
But when the instruction is 16bit, looks like I can find a signal in waveform to show the 16bit instruction correctly... for example, pc=0x1c008134, disassembly shows the instruction val=0xc69c; but the 32bit "inst" signal shows different value in the waveform...
Instead, I find the 16bit inst at output of L2 ram... But I can't use the output of L2 ram in my tool since it's too hard to align with pc...

any ideas?

Thank you!


I just read RISCV manual, looks like these 16bit instructions are RV32C instructions? Then it's decoded into 32bit instruction in the design and the signal "tb_pulp.i_dut.soc_domain_i.pulp_soc_i.fc_subsystem_i.FC_CORE.lFC_CORE.id_stage_i.instr[31:0]" is the decoded one, right?
So my question becomes --- can you point me the signal which cycle aligned with certain "pc" signal and the value is original?

Thank you!

Print this item

  Accelerator HWPE Example Loops on ZedBoard
Posted by: acastillo - 04-20-2020, 02:21 PM - Forum: PULP General questions - No Replies


Right now I am trying to run the accelerator example on the zedboard, but right now I have a issue regarding of running the application. For some reason after this line of code __rt_periph_wait_event(ARCHI_SOC_EVENT_FCHWPE0, 1), the application loops. What can be a good approach to fix it?

[Image: 79639808-3dc6cf80-818e-11ea-84ad-879a3098e98e.png]

Print this item

  Debug Boot code
Posted by: ninipa - 04-16-2020, 04:07 AM - Forum: PULP General questions - Replies (4)


I migrated pulpissimo simulation env to a synthesizable env. I removed tb part so there is no JTAG action (but I confirmed the clocks are all fine in the system). bootsel has been set to 1'b1.
Even without the JTAG action, I expect at least boot-code can run correctly.
But, via compare PC (tb_pulp.i_dut.soc_domain_i.pulp_soc_i.fc_subsystem_i.FC_CORE.lFC_CORE.id_stage_i.pc_id_i[31:0]) value in golden simulation and my simulation. I found that after several instructions, my simulation jumped to another branch, like:
golden sim: .... 0x1a0002dc -> 0x1a0002de -> 0x1a0002e0 -> 0x1a0002e4 -> 0x1a0002e6 -> 0x1a000316 -> .....
my sim:      .... 0x1a0002dc -> 0x1a0002de -> 0x1a0002e0 -> 0x1a0002e4 -> 0x1a0002e6 -> 0x1a0002e8 -> .....
before that, the PC value and sequence is exactly the same

Now my problem of debugging it is: ./sim/boot/boot_code.cde is already made as hex file. I can find the src boot-code at https://github.com/pulp-platform/boot-code, but when I try to make executable, it is invoking "pulp-runtime/install/rules/pulp_properties.mk" but it's not there... (I want to make exe and then objdump it to debug with disassembly)

Can you please point me how to generate the corresponding disassembly to boot_code.cde? Or can you simply help me figure out why my simulation fails with the PC sequence I provided? 

Thank you!

Print this item

  Add custom instruction
Posted by: nayan - 04-08-2020, 04:31 PM - Forum: PULP General questions - Replies (1)

I downloaded pulp riscv gnu toolchain and pulp sdk. I there a way to add a custom instruction to the riscv cross compiler?

Print this item

  Cannot run hello,c on GDB when connected to Ariane via JTAG
Posted by: anouarnechi - 04-08-2020, 03:01 PM - Forum: PULP General questions - Replies (3)

I want to run simple hello.c example So I compiled as following:
riscv64-unknown-elf-gcc hello.c -L linker.lds -o hello.elf
where linker.lds is :


  // I changed this to the DRAM start addr (0x80000000)
  ROM_BASE = 0x80000000; /* ... but actually position independent */

  . = ROM_BASE;

  .text.init : { *(.text.init) }

  .text : ALIGN(0x100) {
  _TEXT_START_ = .;
  _TEXT_END_ = .;

  .data : ALIGN(0x100) {
  _DATA_START_ = .;
  _DATA_END_ = .;

  PROVIDE(_data = ADDR(.data));
  PROVIDE(_data_lma = LOADADDR(.data));
  PROVIDE(_edata = .);

  .bss : ALIGN(0x100) {
  _BSS_START_ = .;
  _BSS_END_ = .;

  .rodata : ALIGN(0x100) {
  _RODATA_END_ = .;

and the compilation was successful. Then, I followed the instructions in GITHUB  connected with success to JTAG. the problem that I cannot run the the hello.elf I can only see the disassemble which looks correct. check what I tried:

~/Desktop/ariane_test/hello$ riscv64-unknown-elf-gdb hello.elf
GNU gdb (GDB)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-pc-linux-gnu --target=riscv64-unknown-elf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
Find the GDB manual and other documentation resources online at:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello.elf...
(gdb)  target remote localhost:3333
Remote debugging using localhost:3333
0x0000000000010044 in ?? ()
(gdb) load
Loading section .text, size 0xc0a2 lma 0x100b0
Loading section .rodata, size 0xdb8 lma 0x1c160
Loading section .eh_frame, size 0x4 lma 0x1d000
Loading section .init_array, size 0x10 lma 0x1d008
Loading section .fini_array, size 0x8 lma 0x1d018
Loading section .data, size 0x1100 lma 0x1d020
Loading section .sdata, size 0x58 lma 0x1e120
Start address 0x00000000000100c2, load size 57294
Transfer rate: 53 KB/sec, 5729 bytes/write.
(gdb) target exec
A program is being debugged already.  Kill it? (y or n) y
No executable file now.
(gdb) target exec hello.elf
(gdb) load
You can't do that when your target is `exec'
(gdb) run
Don't know how to run.  Try "help target".
Could you please help me, I want to see 'Hello Ariane' printed on the console
Thank you

Print this item

  several questions about Pulpissimo SoC platform
Posted by: ninipa - 04-07-2020, 03:33 AM - Forum: PULP General questions - Replies (3)

I've already run "Hello" case successfully with Xcelium, now I have some further questions:
1. In readme I see it says "Either the RI5CY core or the Ibex one as main core". So by default, if I've built everything following readme, which core is used in the Soc?
2. In ARM cores, there is usually a program counter (PC) register, so that users can simply know where the issue happens (with disassembly code). Is there the similar register in Pulpissimo?
3. I see ./sim/boot/boot_code.cde is loaded in boot_rom. Is this boot_code.cde necessary for all the cases? Via the waveform of "Hello" case, I see something is read from boot_rom, but i'm not sure if the boot code is really used or not. What does the boot code do? Initialize the SoC? If I put my executable in SPI flash, can I still reuse the boot code before jumping to SPI content?

Print this item

  Editor to use with pulpissimo?
Posted by: sake - 04-06-2020, 06:40 AM - Forum: PULP General questions - Replies (5)


What kind of setup do you people use to work with pulpissimo?
I would also like to know about editor extensions that might provide auto-completion, jumping to definition and integration with make build errors.

Print this item

  Vsim schematic doesn't work (PULPissimo)
Posted by: Nordic - 04-03-2020, 09:14 AM - Forum: PULP General questions - Replies (8)

Goodmirning everyone Smile 

I was trying to track some signals using che schematic tracer built inside Vsim. I tried to do this using the hello test program inside the pulp-rt-examples repo.

I called the simulation enabling the gui using the commands:

- make clean all
- make run gui=1

but once vsim gui starts, when i try to send the selected instance to vsim schematic editor (doing Rmouse click on the instance -> Add to -> Schematic) i got the following error:
# Debug data file, vsim.dbg, does not exist.

# Invoke vsim with -debugDB to create this file.

So, i tried to manually set the command -debugdb inside the script invoked before running.

The vsim options file invoked might be located in: pulpissimo/sim/tcl_files/run.tcl and i changed the label to be:

set TB "vopt_tb -L models_lib -L vip_lib -debugdb"

i try to run the simulation once again, and i noticed the file vsim.dbg has been created inside the working folder (pulp-rt-examples/hello/build/pulpissimo). However when i try to send the instance inside the schematic tracer again i get the following error:

# Schematic viewing and causality tracing unavailable.

# Possible reasons are :
# 1. vopt was run without -debugdb
# 2. The -novopt option is given with -debugdb which is not allowed.

I tried to manually set vopt that might be invoked from the file located in: pulpissimo/sim/tcl_files/config/vsim.tcl

I modified the related vopt arg list to be something like:

quietly set vopt_args ""

if {$vopt_acc_ena == "YES"} {
 #+ quietly append vopt_args $vopt_args "+acc=abflmnprstv"
 quietly append vopt_args $vopt_args "+acc=mnprv \
                                      -assertdebug \
                                      -bitscalars \
                                      -fsmdebug \
                                      -debugdb \  //line added by me

both commands are recognised by vsim inside the gui debug windows, but the error which appears is one more time the latter i have shown:

# Schematic viewing and causality tracing unavailable.

# Possible reasons are :
# 1. vopt was run without -debugdb
# 2. The -novopt option is given with -debugdb which is not allowed.

Have I done the whole process correctly, or there are already some command line options i need to set in order to activate the debugdb?

Thanks for the time you will dedicate to me, and thanks in advance for all the incoming suggestions Smile

Print this item

  PULP-sdk on centOS: error during build + fix
Posted by: Nordic - 04-02-2020, 09:15 AM - Forum: PULP General questions - Replies (1)

Hello, and thanks for let me join inside your community!

I am writing this thread for sharing to all of you the problem I faced building PULP-sdk on a centOS 7 distribution; and how I solved that without let other people to struggle as I did for solving this.

I was trying to recreate and setup the PULPissimo platform due to functionality analysis. I Have installed each of the requested components (gcc, pulp-sdk, pulp-builder, PULPissimo) inside a generic root project folder called  <user_project_folder_path>. Each of those component has been built inside a dedicated folder. In order to be able to simulate the platform, one of the needed steps is to setup and build the sdk. I moved to the PULP sdk main page, and then followed these steps:
Then, I Set the requested env variables, linking the toolchain and vsim paths:

- export PULP_RISCV_GCC_TOOLCHAIN=<user_project_folder_path>/opt/riscv/bin
- export VSIM_PATH=<user_project_folder_path>/pulpissimo/sim

As suggested form the guide, I first need to download and build the PULPissimo sdk. Since I am running the project on a centOS 7 operating system, then I installed the suggested dependencies:

- sudo yum install git python36-pip python36-devel gawk texinfo gmp-devel mpfr-devel libmpc-devel swig libjpeg-turbo-devel redhat-lsb-core doxygen python-sphinx sox GraphicsMagick-devel ImageMagick-devel SDL2-devel perl-Switch libftdi-devel cmake cmake3 scons
- sudo python3 -m pip install --upgrade pip
- sudo python2 -m pip install --upgrade pip
- sudo python3 -m pip install artifactory twisted prettytable sqlalchemy pyelftools openpyxl xlsxwriter pyyaml numpy configparser pyvcd
- sudo python2 -m pip install configparser

and after I cloned PULP-sdk repo on branch master 

- cd <user_project_folder_path>
- git clone https://github.com/pulp-platform/pulp-sdk.git -b master
- cd pulp-sdk
- source configs/pulpissimo.sh
- source configs/platform-rtl.sh
- make all

The make command started the building for a while, but after at a time it gives the following error (showed also inside the attached screenshot):

camera/camera.cpp:24:22:: fatal error: Magick++.h: No such file or directiry
  #include <Magick++.h>
compilation terminated.

After double checking all the dependencies I started browsing and comparing the same steps using a fresh 16.04 Ubuntu distribution, with resulting that the whole process worked fine on Ubuntu but not on centOS distribution. After struggling and after a long research, I found that inside the dependencies was missing the development library furnished by Magick++. The related dependence was solved installing:

- sudo yum install GraphicsMagick-c++-devel

After calling again the build command make all, I’ve been able to complete the whole sdk build and setup process, which let me able to move throught the following steps in the process. I still don’t know if this error come for some kind of lacks inside my system or not. If someone inside the PULP team want to try and replicate the behaviour, would be nice to fix the missing dependence from the git list in order to solve this problem for all the users which are using the same operating system as me. Anyway, I Hope this might be useful for all those people will found the same error: here’s the fix which can help you saving a lot of precious time Smile

Print this item

  Hello example
Posted by: nayan - 03-30-2020, 06:39 AM - Forum: PULP General questions - Replies (1)

How can I view the intermediate trees generated after make clean all run in hello example

Print this item