Giter Club home page Giter Club logo

esp's Introduction

Open-ESP

DOI

The ESP website contains the most up-to-date information on the ESP project. The Documentation page contains detailed guides and video tutorials that will be released periodically to help users get the most out of ESP.

ESP is an open-source platform for heterogeneous SoC design and prototype on FPGA. It provides a flexible tile-based architecture built on a multi-plane network-on-chip.

In addition to the architecture, ESP provides users with templates and scripts to create new accelerators from SystemC, Chisel, and C/C++. The ESP design methodology eases the process of integrating processors and accelerators into an SoC by offering platform services, such as DMA, distributed interrupt, and run-time coherence selection, that hide the complexity of hardware and software integration from the accelerator designer.

Currently, ESP supports the integration of the LEON3 processor from GRLIB, the Ariane core from the PULP Platform, and the Ibex core from lowRISC. LEON3 implements the SPARC V8 32-bit ISA, Ariane implements the RISC-V 64-bit ISA, and Ibex implements the RISC-V 32-bit ISA.

In addition to processor cores, ESP embeds accelerator design examples created with Stratus HLS in SystemC, Vivado HLS in C/C++ and Chisel.

Furthermore, ESP can serve as a platform to integrate third-party IP blocks. For example, ESP integrates the NVIDIA Deep Learning Accelerator NVDLA, which can be placed on any ESP accelerator tile.

Publications

Overview paper:

Paolo Mantovani, Davide Giri, Giuseppe Di Guglielmo, Luca Piccolboni, Joseph Zuckerman, Emilio G. Cota, Michele Petracca, Christian Pilato, Luca P. Carloni. "Agile SoC Development with Open ESP." IEEE/ACM International Conference On Computer Aided Design (ICCAD), 2020.

The Publications page of the ESP website contains the complete list of publications related to ESP.

Repository organization

Here is a brief description of the main directories in the repository, please refer to the READMEs inside each of them for more information.

  • accelerators contains multiple accelerator design and integration flows, as well as many example accelerators.

  • constraints contains the constraints and attributes for each supported FPGA board (or ASIC technology).

  • socs contains the working folders for launching all Make targets. There is one working folder for each supported FPGA board (or ASIC technology).

  • rtl contains the whole RTL code base, excluding the accelerators RTL and the RTL generated in the working folder by the SoCGen and SocketGen tools.

  • soft contains bootloader, Linux kernel and root file system, and bare-metal library for each of the available processor cores. It also contains bare-metal, user space and kernel space libraries for invoking and managing accelerators.

  • tech is the destination of the RTL generated by the HLS-based and Chisel-based accelerator design flows. It is also the destination of the RTL generated with HLS for the SystemC implementation of the cache hierarchy. The generated RTL is organized based on the target FPGA (or ASIC) technology.

  • tools contains tools for design automation and for communicating with an ESP SoC from a host machine.

  • utils contains various scripts and utilities, including the main Makefiles, the RTL file lists, and the software toolchains installation scripts.

  • .cache caches some compiled libraries so they only need to be compiled once (e.g. Xilinx simulation libraries).

Stay tuned for the new features under development:

  • Dynamic partial reconfiguration SoC flow
  • Expanded support for ASIC design
  • New platform services for programmable accelerators

esp's People

Contributors

davide-giri avatar gabriele-tombesi avatar jdwellman avatar juanesco063 avatar jzuckerman avatar klchiu avatar lucapiccolboni avatar maico-cassel avatar paulmnt avatar pei2748 avatar seldridge avatar vsuresh95 avatar zzhu35 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esp's Issues

Need help simulating ESP

Hello,

I got this error when simulating ESP. Can anyone help?

** Error: /mnt/Archive/Downloads/esp/rtl/src/techmap/unisim/tap_unisim.vhd(30): (vcom-1598) Library "unisim" not found.
** Error: /mnt/Archive/Downloads/esp/rtl/src/techmap/unisim/tap_unisim.vhd(31): (vcom-1136) Unknown identifier "unisim".
** Note: /mnt/Archive/Downloads/esp/rtl/src/techmap/unisim/tap_unisim.vhd(34): VHDL Compiler exiting
make: *** [/mnt/Archive/Downloads/esp/utils/Makefile:1174: modelsim/vsim.mk] Error 2

RISC-V PLIC does not allow interrupt line sharing

Describe the bug
In ESP we let accelerators share the same interrupt line. This works fine on Leon3, because if multiple accelerators activate the interrupt at the same time, the interrupt controller queues both requests on the same line.
It appears, however, that the RISC-V PLIC, instead, clears all requests when the first interrupt handler runs.

To Reproduce
Invoke at least two independent accelerators, using the multi-threaded ESP accelerator API: esp_run(config). Multiple executions might be required to reproduce the issue.

Expected behavior
All interrupts should be caught and handled, even when running the application several times.
To fix, we must have 'socmap' assign different interrupt lines to each accelerator when RISC-V Ariane is selected.

AdderAccelerator application is just a placeholder.

Is your feature request related to a problem? Please describe.
There is no application to invoke the Chisel accelerator AdderAccelerator

Describe the solution you'd like
An example application should be implemented.

Red Hat 7.x

Describe the bug

You can run the ESP flow on Red Hat 7.8. Add the following command to the Centos 7 instructions.

sudo yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/dtc-1.4.6-1.el7.x86_64.rpm

I couldn't find a native package for DTC, so I opted for the rpm package on the Centos 7 repository.

Vivado HLS IPs (xci) are not installed automatically

Vivado HLS may generate Xilixn IP definition files (.xci) as part of the generated RTL.
Currently, ESP installs only RTL and data (.dat) files into the technology-dependent folder.

Users can work around this issue by adding manually the xci file to the list of source files for synthesis, but ESP should pick these files automatically with the Make target <accelerator>-hls and make vivado/srcs.tcl

Error in synthesis step of "How to: design a single-core SoC"

FPGA prototype step of guide "How to: design a single-core SoC" fails when trying to synthesize mig and sgmii

To reproduce, follow the steps in the How to: design a single-core SoC" guide until the FPGA pretty step.

  1. type "make vivado-syn"

I expected to be able to complete the example without any issues.

See screenshot of errors:

Screen Shot 2020-10-09 at 9 42 31 AM

  • OS: Ubuntu 18.04.5
  • CAD tools versions: Vivado and Vitis 2019.2. No RTL simulation CAD tools. Latest version of all other software packets.

Request for documentation: building accelerators from Verilog

Is your feature request related to a problem? Please describe.
I have an existing accelerator implementation in Verilog, and I would like to port it to ESP infrastructure, so that I can use the ESP toolchain with Vivado tools.

The website says

Other options include designing the accelerator in RTL (Verilog, VHDL, SystemVerilog) or designing a deep learning accelerator in Keras/Pytorch/ONNX by leveraging hls4ml. These other options don’t have full support in ESP yet. It’s possible to use them, but they will require more integration effort.

Describe the solution you'd like
If there are any examples or advice (it sounds like there might be from the above quotation?) on doing that, I would appreciate those resources. I would document and contribute back my process once I get it to work.

Describe alternatives you've considered
I am currently trying to work through accelerators/vivado_hls/common/syn/common.tcl and convert that to a version which accepts Verilog input, but this is not my strongsuit.

This is a request for documentation, not a feature request per se, but I am posting it here instead of in an email so that those who encounter this problem in the future can see this issue.

Accelerator design automation

  • Automatically generate the accelerator device driver from existing templates.
  • Automatically generate XML description of the accelerator.
  • Generate the skeleton for user-space application based on libesp.
  • Generate working skeleton for load and store functions.

L1 INVAL on SMAD(W)

Describe the bug
During SMAD(W) transition, when receiving an FWD_INV from NoC, ESP L2 does not send an INVAL to in-tile L1. This can cause erroneous behavior when multicores write to different words in same cache line (MESI false sharing).

To Reproduce
Steps to reproduce the behavior:

  1. change utils/grlib/software/leon3/leon3_test.c to the content in this gist https://gist.github.com/zzhu35/2c5f1a012827f3bfaad806f6ad4492cf
  2. change socs/<design-folder>/systest.c to the content in the above gist as well
  3. configure ESP as the picture below
  4. make vivado-syn make fpga-program make fpga-run

Expected behavior
Core 0 should print results from the all the tests. However, system hangs after printing "Start testing on 4 CPUs." Although I am not 100% sure if this is actually caused by the reported bug, but this behavior was identical to Spandex before the above bug was fixed by inserting inval(fwd_in.addr) to L1.

Screenshots
image

Desktop (please complete the following information):

  • OS: [CentOS]
  • CAD tools versions: [Xilinx Vivado 2018.2]

Additional context

  1. We start with a cache line shared by A and B.
  2. L1A and L1B simultaneously send a write request to L2A and L2B for different words within the same cache line.
  3. L2A and L2B send a GetM to the LLC and change the state S --> SMAD.
  4. The LLC processes first the GetM from A. As a result: S --> M, Data to A, Invalidate to B.
  5. Immediately after the LLC processes the GetM from B. As a result: FwdGetM to A.
  6. L2A receives the Data. As a result: SMAD --> SMA.
  7. L2B receives the Invalidate. As a result: SMAD --> IMAD and InvAck to A. Here is where we should probably send an Invalidate to L1B.
  8. L2A receives the FwdGetM, but that request is stalled while waiting for the InvAck.
  9. L2A receives the InvAck. As a result: SMA --> M.
  10. L2A processes the stalled FwdGetM. As a result: M --> I, Invalidate to L1A, Data to B. This means that L2A and L1A are correctly invalidated.
  11. L2B receives Data from A. As a result: IMAD --> M. Now L2B is updated correctly, but L1B is not.

See email thread with subject ESP L1 Invalidations

C-based memory model for RTL simulation

Bare metal applications with large memory footprints cannot be easily simulated.
Increasing the size of ahbram_sim beyond a few MB slows down the RTL simulator.
Furthermore, when RISC-V is selected, accelerators operate on a memory region with high base address. This region is not represented in the current memory model.
Simulations still work in most cases, because addresses wrap around, as long the result of wrap around does not conflict with the location of the program, or its data.

Proposed solution
Any access to the DRAM model in ahbram_sim should not access an RTL array. Instead, operations should be redirected to a C-based model. Allocated memory regions should be represented as a hash table for quick access to the entire address space, with little memory footprint for the host.

Accelerator generation script fails on CentOS 7

Describe the bug
On CentOS 7 the accelerator generation script utils/scripts/init_accelerator.sh fails after executing the last interactive step.

Here is the error message:

rename: accelerator.h: rename to cholesky.h failed: No such file or directory

Disappearing 1-fllit NoC packets

The following sequence of flits is not routed correctly. In the sequence I use the processor port (P), the west port (W) and the north port (N), but the bug can be triggered using different ports, as long as the output port is the same for all the flits.

  • T0:
    • valid PacketA tail enters input W, directed to output N
  • T1:
    • valid PacketA tail routed to output N
    • valid PacketB single flit (head and tail) enters input P, directed to output N
  • T2: (BUG)
    • valid PacketA tail routed to output N again!
    • single-flit from PacketB is never routed.

Support for OpenSBI

Latest Linux kernels may have issues booting with BBL
The ideal solution would be to replace the boot loader with OpenSBI.

Propagate soft reset from debug unit

Currently the soft-reset is only resetting the processor cores and the ESP cache hierarchy.
Other components, such as the timer and the interrupt controller, should be reset to make sure that a reboot can occur without reprogramming the FPGA.

For now, the target fpga-run-linux depends on fpga-program, but it would be nice to remove such dependency.

Ethernet Debug Link troubleshooting

Describe the bug
it stops at here

To Reproduce
Steps to reproduce the behavior:
source /home/esp/socs/xilinx-vc707-xc7vx485t/vivado/.Xil/Vivado-25650-acs30/webtalk/labtool_webtalk.tcl -notrace
INFO: [Common 17-186] '/home/esp/socs/xilinx-vc707-xc7vx485t/vivado/.Xil/Vivado-25650-acs30/webtalk/usage_statistics_ext_labtool.xml' has been successfully sent to Xilinx on Fri Jul 24 02:11:00 2020. For additional details about this file, please refer to the WebTalk help file at /home/tools/Xilinx/Vivado/2019.2/doc/webtalk_introduction.html.
INFO: [Common 17-206] Exiting Webtalk at Fri Jul 24 02:11:00 2020...
INFO Waiting for DDR calibration...
OBJCP ram.srec
OBJCP systest.bin
ESPLink address 192.168.1.7:46390

Expected behavior
i want to boot linux

Screenshots

image

Part of the ESP GUI gets cut on small screens

Describe the bug
On a small screen part of the ESP GUI doesn't fit the screen and it can't be accessed in any way. This for example prevents from saving the configuration with the button at the bottom.

To Reproduce
An a medium/small laptop go to one of the subfolders of socs and run make esp-xconfig.

Expected behavior
Ideally there should be vertical and horizontal scrollbars to access the parts of the GUI that don't fit the screen.

RISC-V 64-bit toolchain build

Buildroot Build Issue

I tried to re-setup the ESP environment from the beginning.

  1. I cloned the source code by using the following command as shown in setup guide:
git clone --recursive https://github.com/sld-columbia/esp.git
  1. I ran the following to install RISC-V 64-bit toolchain and build root file system.
cd esp
./utils/toolchain/build_riscv_toolchain.sh
  1. I have tried building all 3 items (2 x toolchains + buildroot), or just building "buildroot". Either way yielded the same results.

Then I encountered the following error at last step, "Populating root file system w/ buildroot".

...
...
>>> host-attr 2.4.48 Configuring
(cd /tmp/_riscv_build/buildroot/output/build/host-attr-2.4.48/ && rm -rf config.cache; PATH="/tmp/_riscv_build/buildroot/output/host/bin:/tmp/_riscv_build/buildroot/output/host/sbin:/opt/riscv/bin:/home/aie/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" PKG_CONFIG="/tmp/_riscv_build/buildroot/output/host/bin/pkg-config" PKG_CONFIG_SYSROOT_DIR="/" PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 PKG_CONFIG_LIBDIR="/tmp/_riscv_build/buildroot/output/host/lib/pkgconfig:/tmp/_riscv_build/buildroot/output/host/share/pkgconfig" AR="/usr/bin/ar" AS="/usr/bin/as" LD="/usr/bin/ld" NM="/usr/bin/nm" CC="/tmp/_riscv_build/buildroot/output/host/bin/ccache /usr/bin/gcc" GCC="/tmp/_riscv_build/buildroot/output/host/bin/ccache /usr/bin/gcc" CXX="/tmp/_riscv_build/buildroot/output/host/bin/ccache /usr/bin/g++" CPP="/usr/bin/cpp" OBJCOPY="/usr/bin/objcopy" RANLIB="/usr/bin/ranlib" CPPFLAGS="-I/tmp/_riscv_build/buildroot/output/host/include" CFLAGS="-O2 -I/tmp/_riscv_build/buildroot/output/host/include" CXXFLAGS="-O2 -I/tmp/_riscv_build/buildroot/output/host/include" LDFLAGS="-L/tmp/_riscv_build/buildroot/output/host/lib -Wl,-rpath,/tmp/_riscv_build/buildroot/output/host/lib" INTLTOOL_PERL=/usr/bin/perl CFLAGS="-O2 -I/tmp/_riscv_build/buildroot/output/host/include" LDFLAGS="-L/tmp/_riscv_build/buildroot/output/host/lib -Wl,-rpath,/tmp/_riscv_build/buildroot/output/host/lib"  CONFIG_SITE=/dev/null ./configure --prefix="/tmp/_riscv_build/buildroot/output/host" --sysconfdir="/tmp/_riscv_build/buildroot/output/host/etc" --localstatedir="/tmp/_riscv_build/buildroot/output/host/var" --enable-shared --disable-static --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --disable-debug --with-xmlto=no --with-fop=no --disable-dependency-tracking  --disable-nls )
configure: WARNING: unrecognized options: --disable-gtk-doc, --disable-gtk-doc-html, --disable-doc, --disable-docs, --disable-documentation, --with-xmlto, --with-fop
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for gcc... /tmp/_riscv_build/buildroot/output/host/bin/ccache /usr/bin/gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... configure: error: in `/tmp/_riscv_build/buildroot/output/build/host-attr-2.4.48':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details
package/pkg-generic.mk:219: recipe for target '/tmp/_riscv_build/buildroot/output/build/host-attr-2.4.48/.stamp_configured' failed
make: *** [/tmp/_riscv_build/buildroot/output/build/host-attr-2.4.48/.stamp_configured] Error 1

I wonder what may be the issue? Please advise.
Thanks a lot in advance.

NVDLA DMA performance

NVDLA is not leveraging AXI burst: all transactions have length set to 1 beat.
This is not ideal to communicate over the NoC with the current implementation of the AXI proxy.

We need to allow the AXI proxy to handle multiple outstanding transactions. The number of transactions should be configurable at design time and result in the instance of a queue to hold the necessary information to process DMA read responses.

In addition, the DMA engine must be split into two separate processes to handle requests and responses in parallel.

APB to AXI-Lite adapter fixes

The APB to AXI-Lite adapter apb2axil.sv needs the following fixes:

  • Remove inferred latches in the combinational process.
  • Remove custom behavior for reads/writes for address 0.

Vivado Implementation failure for 1000 MBit Ethernet

I'm trying to reproduce the SoC for the VCU118 board. After enabling 1000 MBit support for the Ethernet peripheral, Vivado implementation will fail with the following messages:

Command: opt_design
Attempting to get a license for feature 'Implementation' and/or device 'xcvu9p'
INFO: [Common 17-349] Got license for feature 'Implementation' and/or device 'xcvu9p'
Running DRC as a precondition to command opt_design

Starting DRC Task
INFO: [DRC 23-27] Running DRC with 8 threads
ERROR: [DRC INBB-3] Black Box Instances: Cell 'eth0.e1/m1000.u0/gtxc0' of type 'greth_gbitc' has undefined contents and is considered a black box.  The contents of this cell must be defined for opt_design to complete successfully.
INFO: [Project 1-461] DRC finished with 1 Errors
INFO: [Project 1-462] Please refer to the DRC report (report_drc) for more information.
ERROR: [Vivado_Tcl 4-78] Error(s) found during DRC. Opt_design not run.

Time (s): cpu = 00:00:12 ; elapsed = 00:00:10 . Memory (MB): peak = 8333.207 ; gain = 47.984 ; free physical = 23609 ; free virtual = 25108
INFO: [Common 17-83] Releasing license: Implementation
19 Infos, 1 Warnings, 1 Critical Warnings and 2 Errors encountered.
opt_design failed
opt_design: Time (s): cpu = 00:00:12 ; elapsed = 00:00:10 . Memory (MB): peak = 8333.207 ; gain = 48.016 ; free physical = 23609 ; free virtual = 25108
ERROR: [Common 17-39] 'opt_design' failed due to earlier errors.

INFO: [Common 17-206] Exiting Vivado at Thu Jun  4 16:36:32 2020...
[Thu Jun  4 16:36:33 2020] impl_1 finished
WARNING: [Vivado 12-8222] Failed run(s) : 'impl_1'
    ERROR: bistream not found; synthesis failed

The menu for the 1000 MBit option in make grlib-xconfig:

image

I'm relaunching the flow without 1000 MBit support to see if this is the problem, the synthesis is spinning now.
Update: things went past DRC with 1000 MBit support off. Seems like an issue with the GbE MAC IP?

  • OS: CentOS 7.7
  • CAD tools versions: Vivado 2019.2

Ariane Cache

Hello,

I saw on the website cache isn't implemented yet for Ariane. Is that still the case? Is there any branches that I could test out that uses cache?

Thank you!

Leon3 Cache Flush Support

Leon3 supports whole-cache-flush instructions according to section 86.3.11 in GrLib IP manual https://www.gaisler.com/products/grlib/grip.pdf How does ESP handle this "flush" CPU request?

cpu_msg is obtained from concatenating two fields, hwrite and hmastlock, of the ahb_slv_in_type data structure https://github.com/sld-columbia/esp/blob/master/rtl/src/sld/caches/l2_wrapper.vhd#L741, which maps to four kinds of requests (atomic R/atomic W/R/W). I think this implies that ESP L2 (and LLC of course) is never aware of the CPU's cache-flush instructions.

This mysterious comment line here https://github.com/sld-columbia/esp/blob/master/systemc/common/caches/cache_types.hpp#L64 indicates that you at least attempted to handle that request but then decided not to support it. Is that true? Why or why not? How exactly is the flush request passed down to the rest of the cache-hierarchy from L1?

Incorrect accelerator nodes in Ariane's device tree

The accelerator nodes in Ariane's device tree are generated incorrectly:

  • There should not be a memory-region field for reserved memory. Only third party accelerators should have that, e.g. NVDLA.
  • The APB address used in the node name should be lower case. This problem manifests itself when there are at least 7 accelerators instantiated.

Replace polling with interrupt in RISC-V device driver

The initial integration of Ariane did not support distributed interrupts. Therefore, the ESP device driver is currently polling the accelerator's status register to check for completion.

Now that distributed interrupts are supported, we can switch to using interrupts for ESP accelerators.

This update should be applied to /soft/ariane/drivers/esp/esp.c

Support for additional platforms

Currently we do not own any of the supported platforms but we are interested in adding ESP to our workflow. We do have other FPGA boards we would like to use.

I was wondering how easy would it be to add support for additional platforms. Namely the ZCU102 and Alveo U280.

Alternatively, I could try to generate the required files on my own but I do not see a tutorial or guide on that.

Thanks in advance.

Last-level cache timing closure issues on the VCU118 FPGA board

Describe the bug
Xilinx Vivado cannot close timing on the last-level cache (LLC) for the VCU118 target FPGA board, even though Stratus HLS successfully generates the RTL of the LLC.

To Reproduce
Synthesize a basic ESP instance with the caches for the VCU118 target FPGA board.

Support Ariane w/ PMP

If bumping Ariane to include PMP support, we see a kernel panic when attempting to run init.

Moving discussion from #61

Leon3 device tree generation

Thank you for the advice, the problem is fixed. But there is another problem when i boot linux:

Disabling lock debugging due to kernel taint                                    
Caller[f0108428]: __register_sysctl_table+0x35c/0x514                           
Caller[f04f5eec]: ipv4_sysctl_init_net+0x14/0x68                                
Caller[f02e0ab8]: ops_init.constprop.7+0xac/0x148                               
Caller[f02e0c04]: register_pernet_operations+0xb0/0x104                         
Caller[f02e0c70]: register_pernet_subsys+0x18/0x34                              
Caller[f04f5eb4]: sysctl_ipv4_init+0x34/0x58                                    
Caller[f0007128]: do_one_initcall+0x2c/0x174                                    
Caller[f04df01c]: kernel_init_freeable+0x124/0x1c0                              
Caller[f03e0b14]: kernel_init+0x4/0x104                                         
Caller[f0008234]: ret_from_kernel_thread+0xc/0x38                               
Caller[00000000]:   (null)                                                      
Instruction DUMP: 80886001                                                      
 12800076  01000000                                                             
< c6006004> 88106001                                                             
 80a0c002  0280002c                                                             
 8e100001  80a0e000                                                             
                                                                                
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009         
                                                                                
Press Stop-A (L1-A) to return to the boot prom                                  
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009

Originally posted by @CristinaZN in #50 (comment)

Device drivers incorrectly configure accelerators with >4 config parameters

Describe the bug
Device drivers incorrectly configure accelerators with more that 4 configuration parameters. The p2p-related functions in the driver most likely have a buffer overflow.

To Reproduce
Create any ESP accelerator with more than four configuration parameters and test it on FPGA.

Expected behavior
Currently ESP works with up to 14 custom configuration parameters per accelerator.

Missing package in Ubuntu

Describe the bug

With a fresh start from Ubuntu 18.04, an user needs

sudo apt install -y flex

to compile the RISCV toolchain.

Incorrect sporadic behavior of Vivado HLS accelerators

Describe the bug
When testing ESP on FPGA, for an unknown reason sometimes the Vivado HLS accelerators do not function correctly. When adding debug probes with the Vivado ILA utility to the accelerator interface, the accelerators always function correctly.

Leon3 Stack Pointer

Add configuration knob for the Leon3 stack pointer.
We used to configure this through GRMON, however the latest release of the evaluation version does not allow us to connect to the debug unit when the system integrates IP blocks not recognized by GRMON.
We've implemented our own open-source application to replace GRMON, but at the moment we cannot manage the Leon3 debug unit.

Accelerator L2 wrapper issues flush before all outstanding requests are served

Describe the bug
The accelerator L2 wrapper issues a flush to the L2 before the last requests are served. Because of the priority encoding in the cache, the flush is processed before CPU requests. This breaks coherence assumptions that an accelerator is exclusively working on data, and triggers undefined behavior with later DMA requests.

To Reproduce
Steps to reproduce the behavior:
On branch esp-synth-app, create an SoC with 12 synthetic accelerators. Run the application synth.exe with the file synth_cfg.txt .

Expected behavior
The flush should not be issued until the final request has been served.

Automatic detection of enabled coherence models for accelerators

Device drivers, including bare metal applications, should be able to probe the hardware and detect whether the ESP cache hierarchy is present and whether the accelerator has the private L2 cache in the tile.

After probe, this information should be stored in the device data structure and used to prevent invocations with coherence models not enabled in the current hardware configuration.

Synthesis Pipeline Broken

After pulling the most recent commit 794a0a9 from master to a local clean install of ESP, Vivado synthesis pipeline errors out with

ERROR: [Synth 8-1031] cache_attribute_array is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:290]
ERROR: [Synth 8-1031] dma_attribute_array is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:349]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:463]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:464]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:465]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:466]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:467]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:468]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:469]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:470]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:471]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:472]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:473]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:474]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:475]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:476]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:477]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:478]
ERROR: [Synth 8-1031] cache_tile_id is not declared [/projects/esp/socs/xilinx-vc707-xc7vx485t/socmap.vhd:480]

After reverting to an older commit c462c99, everything is working fine. I did not try any version in between though.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.