Giter Site home page Giter Site logo

arduino's Introduction

f32c

f32c is a retargetable, scalar, pipelined, 32-bit processor core which can execute subsets of either RISC-V or MIPS instruction sets. It is implemented in parametrized VHDL which permits synthesis with different area / speed tradeoffs, and includes a branch predictor, exception handling control block, and optional direct-mapped caches. The RTL code also includes SoC modules such as a multi-port SDRAM and SRAM controllers, video framebuffers with composite (PAL), HDMI, DVI and VGA outputs with simple 2D acceleration for sprites and windows, floating point vector processor, SPI, UART, PCM audio, GPIO, PWM outputs and a timer, as well as glue logic tailored for numerous popular FPGA development boards from various manufacturers.

In synthetic integer benchmarks the core yields 3.3 CoreMark/MHz and 1.46 DMIPS/MHz with code and data stored in on-chip block RAMs. When configured with 16 KB of instruction and 8 KB of data cache, and with code and data stored in external SDRAM, the core yields 3.13 CoreMark/MHz and 1.39 DMIPS/MHz.

A performance-tuned f32c SoC which includes a timer and an UART occupies only 1048 6-input LUTs, while still being able to execute gcc-generated code when synthesized in the most compact configuration which consumes just 697 (649 logic plus 48 memory) LUTs.

Floating point vector processor can be optionally synthesized. Tested on Xilinx Spartan-6 (xc6slx25) and 7-series (xc7a35i, xc7a102t, xc7z010), Altera Cyclone-4 (EP4CE22) and MAX-10 (10M50DAF), Lattice ECP3 (LFE3-150EA) and ECP5 (LFE5UM-85F). On Artix-7 it uses 3148 LUTs, 64K BRAM, 38 DSP multipliers (36 for divider unit) and can provide up to 3 MFLOPs/MHz.

The Fmax depends on core configuration and FPGA silicon, and tops at around 115 MHz for 90 nm FPGAs (such as Xilinx S3E / S3A or Lattice XP2) up to 185 MHz for latest generations of 6-input LUT FPGAs such as Artix-7.

Configurable options include:

C_arch               RISC-V or MIPS ISA
C_big_endian         bus endianess
C_mult_enable        synthesize multipler unit
C_branch_likely      support branch delay slot annulling
C_sign_extend        support sign extension instructions
C_movn_movz          support conditional move instructions
C_ll_sc              support atomic read-modify-write constructs
C_branch_prediction  synthesize branch predictor
C_bp_global_depth    global branch history trace size
C_result_forwarding  synthesize result bypasses
C_load_aligner 	     synthesize load aligner
C_full_shifter 	     pipelined instead of iterative shifer
C_icache_size        instruction cache size (0 to 64 KB)
C_dcache_size        data cache size (0 to 64 KB)
C_debug              synthesize single-stepping debug module

Pre-compiled gcc-based toolchains for Windows, OS-X and Linux can be found at the FPGArduino page, together with pre-built demo bitstreams for various Xilinx, Altera and Lattice FPGAs, and with further instructions on how to compile RISC-V / MIPS executables using the Arduino IDE.

All VHDL modules are BSD licensed. The majority of software libraries are borrowed from FreeBSD, while some originate from other projects and may be subject to an MIT-style license.

arduino's People

Contributors

emard avatar gornjas avatar mhaghighi avatar xarklabs 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

Watchers

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

arduino's Issues

GPIO INPUT register changed address

before, GPIO input register was on the same memory map
location as the GPIO output register,.

Now it's separate to enable better AVR compatibility

Simple_io, which is used for LEDs and pushbuttons, will
continue working as before. GPIO is more complex than
simple_io, as it supports bidirectional pins and interrupts

Old bitstreams currently don't yet follow latest GPIO change
introduced in our arduino core. It will take some time
until we to compile them all and distribute

In the meantime quick fix is to compile fresh f32c bitstream
from github source

Arduino library for DHT11DHT22

Got it working, but needed to remove interrupts() and noInterrupts() function from DHT.cpp file

initialy I got this two errors errors:
'__enable_irq' was not declared in this scope
'__disable_irq' was not declared in this scope

RISC-V compilation fails

Hi!

The board manager already downloads gcc-7, but the compiler settings in platform.txt seem to be outdated. Right now it is not possible to compile for RISC-V.
image

I tried with -march=rv32i -mabi=ilp32 but i get still errors. If gcc-7 is unstable maybe it is better to revert to the previous toolchain?

Here are the compiler options for risc-v
https://gcc.gnu.org/onlinedocs/gcc/RISC-V-Options.html

BASIC as arduino library

BASIC interpreter for f32c could be packet as c++ library
and as such could be easily added to any arduino sketch.

Timer interrupt example doesn't compile

IDE: Arduino IDE 1.6.9
OS: Windows 10 x64

Description: Selecting "mips_timer" example under "f32c/interrupts" cannot compile because of following reason:

"VARIANT_MCK' was not declared in this scope

Incorrect library

Hello!
I have found ur library about 2 days and I have some problems with it.
I am using Spartan Start Kit S3E-500. I done all you said to see my board, I see it on Board Manager, and I see ujprog, so it seems to be correct.But when I try to compile any example I have a error (it is on white colour so it seems to be warning may be) incorrect library found in C:\Users\Acidka\AppData\Local\Arduino15\packages\FPGArduino\hardware\f32c\1.0.0\libraries\f32c: C:\Users\Acidka\AppData\Local\Arduino15\packages\FPGArduino\hardware\f32c\1.0.0\libraries\f32c
And there was some problems with paths on this path like bootloader foulder was in "tools" and he couldn't find it, but I replaced and he found. So if I try to load it it just do nothing.

Thanks for help,
Acridka.

MIPS gcc won't compile u8g, RISC-V compiles it

u8glib will not compile for MIPS gcc
actually compiles but mips-elf-objcopy fails

RISC-V compiles the same and works
tested on SSD1306 SPI (software)
in u8g.h section SW SPI, Arduino after teensy add this
#elif defined(__ F32C __) /* FPGArduino */
#define U8G_COM_SW_SPI u8g_com_arduino_std_sw_spi_fn
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn

https://bintray.com/olikraus/u8glib/Arduino/view

u8glib_arduino_v1.18.1.zip
sha1: f90c3c338244ff872c9c94777d7d76be381788a6

In the Arduino IDE, import the ZIP library from the "Add Library" Menu.
compile any example .e.g. U8gLogo

.arduino15/packages/FPGArduino/tools/f32c-compiler/1.0.0/bin/mips-elf-objcopy -O binary /tmp/build5698330625315358907.tmp/U8gLogo.cpp.elf /tmp/build5698330625315358907.tmp/U8gLogo.cpp.bin
BFD: Warning: Writing section .init' to huge (ie negative) file offset 0xffffffff7fc00000. BFD: Warning: Writing section.text' to huge (ie negative) file offset 0xffffffff7fc0005c.
BFD: Warning: Writing section .rodata' to huge (ie negative) file offset 0xffffffff7fc0222c. BFD: Warning: Writing section.ctors' to huge (ie negative) file offset 0xffffffff7fc0228c.
BFD: Warning: Writing section `.sdata' to huge (ie negative) file offset 0xffffffff7fc02290.

tools bin folder is empty

Cannot run program "C:\Users\gmahovlic\AppData\Roaming\Arduino15\packages\FPGArduino\tools\f32c-compiler\1.0.0\bin\mips-elf-g++" (in directory "."): CreateProcess error=2, The system cannot find the file specified

No serial output

This simple example does not return serial

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(19200);
}

void loop() {
Serial.print("1");
Serial.print("2");
Serial.print("3");
Serial.print("4");
Serial.println("5");
}

and this one is working

// initialize serial communication at 9600 bits per second:
Serial.begin(19200);
}

void loop() {
Serial.print("1");
Serial.print("2");
Serial.print("3");
Serial.println("4");
}

Amazing work

Amazing work by you. It really acts as replacement for Wire in Master case. It really helped a lot.

Problem with compiling sketch in linux

Just did the example SerialEvent with baudrate changed to 19200. Here is the output:

/home/magnus/.arduino15/packages/FPGArduino/tools/f32c-compiler/1.0.0/bin/mips-elf-ar rcs /tmp/build1860868207851946728.tmp/core.a /tmp/build1860868207851946728.tmp/UARTClass.cpp.o
/home/magnus/.arduino15/packages/FPGArduino/tools/f32c-compiler/1.0.0/bin/mips-elf-ld -N -EL -gc-sections --library-path=/home/magnus/.arduino15/packages/FPGArduino/hardware/f32c/1.0.0/system/mips/lib -nostdlib --section-start=.init=0x400 -lcrt0 /tmp/build1860868207851946728.tmp/mySerialEvent.cpp.o /tmp/build1860868207851946728.tmp/core.a -lulx2s -lm -lc -o /tmp/build1860868207851946728.tmp/mySerialEvent.cpp.elf
/tmp/build1860868207851946728.tmp/mySerialEvent.cpp.o: In function _GLOBAL__sub_I_inputString': mySerialEvent.cpp:(.text.startup._GLOBAL__sub_I_inputString+0x28): undefined reference to__dso_handle'
mySerialEvent.cpp:(.text.startup._GLOBAL__sub_I_inputString+0x2c): undefined reference to __cxa_atexit' /tmp/build1860868207851946728.tmp/core.a(WString.cpp.o): In functionString::changeBuffer(unsigned int)':
(.text._ZN6String12changeBufferEj+0x1c): undefined reference to realloc' /home/magnus/.arduino15/packages/FPGArduino/tools/f32c-compiler/1.0.0/bin/mips-elf-ld: /tmp/build1860868207851946728.tmp/mySerialEvent.cpp.elf: hidden symbol__dso_handle' isn't defined
/home/magnus/.arduino15/packages/FPGArduino/tools/f32c-compiler/1.0.0/bin/mips-elf-ld: final link failed: Bad value
Error compiling.

SPI example will not link

They used to compile, but now I don't know whazzup
examples->SPI->DigitalPotControl
/tmp/build1904330117572721905.tmp/DigitalPotControl.cpp.o: In function setup': (.text.setup+0x18): undefined reference toSPI'

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.