Authors Jeremy Bennett Julius Baxter
License CC-BY-2.0
Open Source Software Meets Open Source Hardware OpenCores and the OpenRISC 1000 Jeremy Bennett, CEO Embecosm Julius Baxter, OpenRISC Program Manager, OpenCores.org 17 October 2011 Agenda About OpenCores – licensing OpenRISC 1000 architecture – OpenRISC 1200 implementation – verification OpenRISC 1000 tool chain – tools, libraries and operating systems – software development on OpenRISC 20 minute break (refreshments outside) Hands-on session – installing the software – bare metal and Linux Find out more... About OpenCores Overview of OpenCores 131,382 registered users reported as of 17 October 2011 870 projects as of 17 October 2011 Founded by OpenRISC 1000 OpenRISC 1000 Damjan Lampret developed commercial deployment 1999 2007 2011 Primary support Flextronics Owned by ORSoC AB Web: www.opencores.org and www.openrisc.net IRC: freenode.net, channel #opencores Copyright © 2011 Embecosm. Freely available under a Creative Commons license 4 Licensing Open Source Hardware Most OpenCores hardware is LGPL or BSD – software tools GPL, documentation also GPL (!) What does LGPL mean for hardware – open source obligations apply only to this hardware block – what is the hardware equivalent of linking? OSS licenses don't really work – consider: I take an LGPL hardware design and modify it I manufacture a chip from that design I sell you one of those chips – Am I then obliged to give you a copy of the modified Verilog I used? There are alternatives based on contract law – best known are the TAPR OHL and CERN OHL – tend to be jurisdiction specific This is a major barrier to open source hardware growth Copyright © 2011 Embecosm. Freely available under a Creative Commons license 5 The OpenRISC 1000 Architecture The OpenRISC 1000 Project Objective to develop a family of open source RISC designs – 32 and 64-bit architectures – floating point support – vector operation support Key features – fully free and open source – linear address space – register-to-register ALU operations – two addressing modes – delayed branches – Harvard or Stanford memory MMU/cache architecture – fast context switch Looks rather like MIPS or DLX Copyright © 2011 Embecosm. Freely available under a Creative Commons license 7 The OpenRISC 1200 OpenRISC 1200 32-bit Harvard RISC architecture W – MIPS/DLX like instruction set Power Inst i Mgmt MMU – first in OpenRISC 1000 family s h – originally developed 1999-2001 B J o Open source under the T Debug CPU Inst A n – GNU Lesser General Public License Unit Cache G e – allows reuse as a component ALU Configurable design W – caches and MMUs optional Tick Data i Timer MMU – core instruction set s h Source code Verilog 2001 B – approx 32k lines of code o Data Full GNU tool chain and Linux port PIC n Cache e – various RTOS ported as well Copyright © 2010 Embecosm. Freely available under a Creative Commons license 8 ORPSoC: OpenRISC Reference Platform System-on-Chip Combined reference implementation and board ORPSoC Clock, Reset adaptations management OR1200 Reference implementation – minimal SoC for processor Memory testing, development Controller Wish- – compilable into cycle-accurate bone model Bus UART Arbiter Boards ports target multiple technologies SoC Lowers barrier to entry for Peripheral A Debug OpenRISC-based SoC design Interface JTAG TAP – Push-button compile flow – Largely utilises open-source EDA tools JTAG Copyright © 2010 Embecosm. Freely available under a Creative Commons license 9 Hardware Development Objective is to use an open source EDA tool chain – back end tools for FGPA all proprietary free (as in beer) versions available – front end tools now have open source alternatives OpenRISC 1000 simulation models – Or1ksim: golden reference ISS C/SystemC interpreting ISS, 2-5 MIPS – Verilator cycle accurate model from the Verilog RTL 130kHz in C++ or SystemC – Icarus Verilog event driven simulation 1.4kHz, 50x slower than commercial alternatives All OpenRISC 1000 simulation models suitable for SW use – all support GDB debug interface Copyright © 2010 Embecosm. Freely available under a Creative Commons license 10 OR1200 Verification 1999-2001 Test bench and DUT simulated using Icarus Verilog – Open source event driven simulator – Approximately 20-50 times slower than NC/VCS/ModelSim – 1.4kHz on a basic Core2 Duo Test by running programs in C and assembler – 13 different test programs Limitations – not exhaustive – no coverage metrics – not consistent with the golden reference model Needs NeedsImprovement Improvement Copyright © 2010 Embecosm. Freely available under a Creative Commons license 11 OVM Verification of the OR1200 MSc by Waqas Ahmed, KTH, Stockholm Criteria – does PC update correctly? – does status update correctly? – does exception save context correctly? – is data stored to the correct memory address? – are results stored correctly in registers? Compare behavior of RTL against Or1ksim – constrained random generation of scenarios Provide SystemVerilog wrappers – for Or1ksim use DPI to SystemC interface Results: – l.jr/l.jalr to unaligned address – l.addic and l.lws missing in DUV – l.macrc/l.ror/l.rori missing from Or1ksim – 20 instructions had errors – most coverage targets achieved Copyright © 2010 Embecosm. Freely available under a Creative Commons license 12 More Hardware Verification There is another way... (to be continued later) Copyright © 2010 Embecosm. Freely available under a Creative Commons license 13 The OpenRISC 1000 Tool Chain The Software Tool Chain A standard GNU tool chain – binutils 2.20.1 – gcc 4.5.1 – gdb 7.3 (for BCS use only!) – C and C++ language support Library support – static libraries only – newlib 1.18.0 for bare metal (or32-elf-*) – uClibc 0.9.32 for Linux applications (or32-linux-*) Testing – regression tested using Or1ksim (both tool chains) – or32-linux-* regression tested on hardware – or32-elf-* regression tested on a Verilator model Board and OS Support Boards with BSP implementations – Or1ksim – DE-nano – Terasic DE-2 RTOS support – FreeRTOS, RTEMS and eCos all ported Linux support – adopted into Linux 3.1 kernel mainline – some limitations (kernel debug, ptrace) – BusyBox as application environment Debug interfaces – JTAG for bare metal – gdbserver over Ethernet for Linux applications Software Development Remote Connection to GDB TCP/IP USB JTAG RSP GDB I/F Server RSP (gdb) (gdb) target target remote remote :51000 :51000 Copyright © 2010 Embecosm. Freely available under a Creative Commons license 17 Remote Connection to SystemC TCP/IP SystemC RSP SystemC GDB Server Model RSP I/F (gdb) (gdb) target target remote remote :51000 :51000 Copyright © 2010 Embecosm. Freely available under a Creative Commons license 18 Unified SystemC Debug Firmware World Hardware World Hand-written TLM 2.0 TLM JTAG Model Simulation or JTAG CA model Debugger Protocol simulation (GDB RSP) Emulation Debugger JTAG or FPGA (GDB) driver Silicon JTAG driver SystemC SystemCTLM TLMJTAG JTAGInterface Interface Copyright © 2010 Embecosm. Freely available under a Creative Commons license 19 More Hardware Verification There is another way... (continued) Copyright © 2010 Embecosm. Freely available under a Creative Commons license 20 Comparative Regression Testing of the OpenRISC 1200 Golden SystemC TLM Model === gcc Summary === # of expected passes 52753 # of unexpected failures 152 # of expected failures 77 # of unresolved testcases 122 # of unsupported tests 716 Copyright © 2010 Embecosm. Freely available under a Creative Commons license 21 Comparative Regression Testing of the OpenRISC 1200 Golden SystemC TLM Model Verilator SystemC RTL Model === gcc Summary === === gcc Summary === # of expected passes 52753 # of expected passes 52677 # of unexpected failures 152 # of unexpected failures 228 # of expected failures 77 # of expected failures 77 # of unresolved testcases 122 # of unresolved testcases 122 # of unsupported tests 716 # of unsupported tests 716 Copyright © 2010 Embecosm. Freely available under a Creative Commons license 22 Comparative Regression Testing of the OpenRISC 1200 Golden SystemC TLM Model Verilator SystemC RTL Model === gcc Summary === === gcc Summary === # of expected passes 52753 # of expected passes 52677 # of unexpected failures 152 # of unexpected failures 228 # of expected failures 77 # of expected failures 77 # of unresolved testcases 122 # of unresolved testcases 122 # of unsupported tests 716 # of unsupported tests 716 We can identify two types of problem – tests which fail due to timing out with RTL, but not due to slower model – tests which give a different result with RTL These are candidates for possible RTL errors Used commercially by Adapteva Inc – 50-60 RTL errors eliminated pre-tape out Copyright © 2010 Embecosm. Freely available under a Creative Commons license 23 Test Failure Examples gcc.c-torture/execute/20011008-3.c execution, -O0 – this test just needs more time gcc.c-torture/execute/20020402-3.c execution, -Os – this test doesn't complete in 2 hours – sibling tests take 200k cycles – BUG??? gcc.c-torture/execute/20090113-1.c execution, -O2 – RTL test fails with bus error exception – BUG??? Copyright © 2010 Embecosm. Freely available under a Creative Commons license 24 Practical Demonstration Practical Demonstrations Three strands Using OpenRISC bare metal on an FPGA – Jeremy Bennett Using OpenRISC with Linux on an FPGA – Julius Baxter Using OpenRISC on Or1ksim – Everyone! – both native and Linux Installation: Preparation DVD/USB contains source code for – Verilog RTL and testbench for OpenRISC 1200 and ORPSoC – Or1ksim, the architectural simulator – The GNU tool chain (binutils, gcc and gdb) – newlib and uClibc libraries – Linux kernel and BusyBox – Assorted scripts – Example program (hello.c) Ensure you have the following installed – native GNU tool chain (usually standard) – install the following packages if not already present sudo yum install gmp-devel sudo yum install mpfr-devel sudo yum install libmpc-devel Installation: GNU Tool Chains Preparation – copy everything from the DVD/USB to your local disc – untar the packages in the toolchain directory – decide where to install Or1ksim and the GNU toolchain – default /opt/or1ksim-new and /opt/or32-new Build or1ksim and GNU tool chains ./bld-or1ksim.sh –-prefix /opt/or1ksim-new ./bld-all.sh --prefix /opt/or32-new \ –-or1ksim-dir /opt/or1ksim-new Add tools to the PATH export PATH=/opt/or32-new/bin:/opt/or1ksim-new/bin:$PATH – or setenv PATH /opt/or32-new/bin:/opt/or1ksim-new/bin:$PATH You may also need sudo ln -s /lib/libncurses.so.5.7 /lib/libtinfo.so.5 Installation: Linux and BusyBox Unpack the linux initramfs cd linux-2.6.39 tar jxf initramfs.tar.bz2 cd .. Configure BusyBox cd busybox-1.17.3 make menuconfig – under BusyBox Settings → Build Options Build BusyBox as static binary setting: [*] (Y) Cross Compiler prefix setting: or32-linux- – under BusyBox Settings → Installation Options BusyBox installation prefix setting: installation_root/linux-2.6.39/arch/openrisc/support/initramfs cd .. Build Linux and BusyBox ./bld-bb.sh Bare metal example Build the example cd examples or32-elf-gcc hello.c -o hello Run the example or32-elf-sim --memory=8M hello Run the example using GDB. In first window or32-elf-sim --memory=8M --srv=51000 In second window cd examples or32-elf-gdb hello (gdb) target remote :51000 (gdb) load (gdb) break main (gdb) continue (gdb) backtrace (gdb) continue Bare metal debugging Simulation as remote debugging target – Run the example using GDB. In first window or32-elf-sim --memory=8M --srv=51000 – In second window cd examples or32-elf-gdb hello (gdb) target remote :51000 (gdb) load (gdb) break main (gdb) continue (gdb) backtrace (gdb) continue Using simulator built into GDB or32-elf-gdb hello (gdb) target sim (gdb) load (gdb) etc... Running Linux Edit arch/openrisc/or1ksim.cfg – find section ethernet – set enabled to 0 – comment out the sockif line Run kernel and BusyBox cd linux-2.6.39 or32-elf-sim -f arch/openrisc/or1ksim.cfg vmlinux Run kernel with Ethernet – use TUN/TAP to create a virtual IP interface, which Or1ksim can use – requires typically openvpn and/or bridge-utils installed – scripts brstart.sh or brstart_static.sh can be used to set up bridge. or32-elf-sim -f arch/openrisc/or1ksim.cfg vmlinux – demonstration only today, homework for the audience FPGA Bare Metal Demonstration System details: Run or-debug-proxy – ORSoC AB board – /dev/ttyUSB0 for JTAG Actel A3P1000 FPGA – /dev/ttyUSB1 for UART – debug interface Connect picocom to ORSoC USB debug cable /dev/ttyUSB0 or-debug-proxy – picocom --b 115200 --p n Software: --d 8 /dev/ttyUSB0 – bootloader from flash – “Hello World” program download using GDB FPGA With Linux Demonstration System details: Software: – ORPSoC Xilinx ML501 (Virtex – U-boot bootloader from flash 5) board port 2011.09-rc2 OR1200 Boot kernel from flash – 32KB Insn/Data cache Boot with TFTP download – 66MHz – Linux kernel port – FPU, MAC enabled 2.6.39 DDR2, CFI flash BusyBox 10/100 Ethernet Currently a little bit limited due UART, SPI, I2C, GPIO to lack of shared Uses about 50% of LX50's library/dynamic linking resources support. All RTL source open and available – Debug interface: ORSoC USB debug cable OpenOCD as proxy Find out More Find out More The OpenCores website – www.opencores.org The Open Source Hardware User Group (OSHUG) – www.oshug.org – evening meetings each month in London – first UK Open Source Hardware camp, 27 October FSCONS – keynote by Richard Stallman – OpenRISC workshop Commercial support – Embecosm – www.embecosm.com Thank You Thank You www.embecosm.com www.opencores.org Copyright © 2010 Embecosm. Freely available under a Creative Commons license 37