Figure 1. Software interface generated by Nios IDE - 1 -

Size: px
Start display at page:

Download "Figure 1. Software interface generated by Nios IDE - 1 -"

Transcription

1 ECE 332L Microprocessors Lab (Fall 2007) Lab 6 Continue (Week 9) Objective: In this lab, you will continue the exploration of interrupts in C using a portion of the Hardware Abstraction Layer (HAL) support from Altera. Note: Use ptf and sof from last week Part 1: Interrupt Service Routine with Assembly only Last week we worked with the modules int1.s, int2.s, int3.s, and int4.s. You were told to use (Quartus II Version 7.1 Handbook Volume5: Embedded Peripherals) JTAG UART (Chapter 7: JTAG UART Core with Avalon Interface) to create int5.s that when values are typed into the Terminal Window cause an interrupt to happen. The value received from keyboard is displayed to the seven-segment LEDs. The ISR should store the character value received into a variable that is retrieved from the main routine. Look at the steps taken in examples int3.s and int4.s and compare to the documentation for those devices. Using this knowledge review the documentation for the JTAG UART to produce code that will achieve the desire results. Part 2: Interrupt Service Routine with C Programming Language and Minimum HAL Last week we interfaced to interrupts from the assembler language platform. This week we will interface from the C platform provided by Altera. When the NIOS II IDE creates the system library (syslib, figure 1 is a block diagram of a portion of the initialization process and interfaces provided by Altera) it automatically creates lowlevel drivers and interfaces for key devices such as the timer and JTAG UART devices. For this lab we wish to implement these low-level control ourselves (Trust me, this is what you will have to do in real world. So, sit tight and learn this stuff.). In order to do this we must disable the interfaces provided by Altera. main () alt_main () alt_sys_init() Altera HAL API 2 init TIMER init JTAG_UART init SP_SPI init LCD init UART init SYSID crt0.s 1 Altera HAL TIMER JTAG_UART SD_SPI LCD UART SYSID 0x20 Hardware Figure 1. Software interface generated by Nios IDE - 1 -

2 In order to disable the devices for this lab navigate to the syslib directory in the NIOS II IDE directory for you project and find the alt_sys_init.c file and comment out the two lines shown in Figure 2. After the syslib has been re-compiled the block diagram of the system should be as shown in Figure void alt_sys_init( void ) // ALTERA_AVALON_TIMER_INIT( TIMER, timer ); // ALTERA_AVALON_JTAG_UART_INIT( JTAG_UART, jtag_uart ); ALTERA_AVALON_SPI_INIT( SD_SPI, sd_spi ); ALTERA_AVALON_LCD_16207_INIT( LCD, lcd ); ALTERA_AVALON_UART_INIT( UART, uart ); ALTERA_AVALON_SYSID_INIT( SYSID, sysid );... Figure 2. Disable low-level support for timer and jtag_uart main () Timer_Init ( ); JTAG_UART_Init (); 3 4 alt_main () alt_sys_init() Altera HAL API 2 init SP_SPI init LCD init UART init SYSID 1 TIMER JTAG_UART Figure 3 Altera HAL SD_SPI LCD UART SYSID Hardware Figure 3: Software interface generated by Nios IDE after modification - 2 -

3 Once Altera is no longer controlling these devices we are ready to start developing our own code to control them ourselves. You are provided with four modules as examples for working with ISR code in this environment. Code examples in3.c - prototype code for buttons ISR in4.c - prototype code for timer ISR in5.c - prototype code for JTAG UART ISR in6.c - Typical layered driver model for buttons and timer ISRs Even though we have removed these devices from Altera s HAL environment we will still utilize functionality for dealing with ISR s provided by Altera. In your reference manuals find documentation for the following HAL API Functions. alt_irq_disable () alt_irq_enable () alt_irq_register () alt_irq_diable_all () alt_irq_enable_all () alt_irq_enabled () Now load and run the example code Setup project int3.c (same functionality as int3.s) buttons interrupts in C. Compare the int3.s solution. Setup project int4.c (same functionality as int4.s) timer interrupts in C. Compare the int4.s solution. Setup project int5.c (same functionality as int5.s) jtag_uart interrupts in C. Build the project but do not run from Nios IDE. This routine will require testing in a different manor. Since we have disabled the JTAG UART routines in Nios IDE we cannot interact with the solution in FPGA through the console. So we will test another way. Open two NIOS II 7.1 Command Shells In the first shell issue the following nios2-terminal In the other navigate to the directory that contains int5.elf then issue the following command nios2- download g int5.elf Now go back to 1st window and start typing characters. You should see results on seven-segment LEDs of DE

4 // int3.c Button interrupts #include "sys/alt_irq.h" #include "unistd.h" // for usleep typedef unsigned int REGISTER; struct PIO_REGS REGISTER direction; REGISTER intmask; REGISTER edgecapture; ; // data register // direction register // interrupt mask register // edge capture register struct PIO_REGS *LEDS_RED = (struct PIO_REGS *)(LEDR_BASE 0x ); struct PIO_REGS *BUTTONS = (struct PIO_REGS *)(BUTTONS_BASE 0x ); static unsigned int BTNS = 0; void handle_button_interrupts() BTNS = BUTTONS->edgecapture; // get buttons pushed BUTTONS->edgecapture = 0; // acknowledge interrupt handled int main (void) REGISTER LAST_BTNS; // save last buttons pushed alt_irq_register( BUTTONS_IRQ, NULL, (void*)handle_button_interrupts ); BUTTONS->intmask = 0x5; // 0b101 while (1) if ( BTNS!= LAST_BTNS ) // have buttons changed LEDS_RED->data = BTNS; // show buttons LAST_BTNS = BTNS; // get new buttons benchmark usleep(100); return 0; - 4 -

5 // int4.c timer interrupts #include "sys/alt_irq.h" #include "unistd.h" // for usleep typedef unsigned int REGISTER; typedef unsigned int BITS; struct PIO_REGS REGISTER direction; REGISTER intmask; REGISTER edgecapture; ; // data register // direction register // interrupt mask register // edge capture register union TIMER_STATUS_REG struct BITS TO : 1; BITS RUN : 1; BITS unused : 30; bits; ; union TIMER_CONTROL_REG struct BITS ITO : 1; BITS CONT : 1; BITS START : 1; BITS STOP : 1; BITS unused : 28; bits; ; struct TIMER_REGS union TIMER_STATUS_REG status; union TIMER_CONTROL_REG control; REGISTER periodl; REGISTER periodh; REGISTER snapl; REGISTER snaph; ; struct PIO_REGS *SEVEN_SEG = (struct PIO_REGS *)(SEVENSEG_LED_BASE 0x ); struct TIMER_REGS *TIMER = (struct TIMER_REGS *)(TIMER_BASE 0x ); static unsigned int SYSTIME = 0; void handle_timer_interrupts() SYSTIME++; TIMER->status.bits.TO = 0; int main (void) REGISTER LAST_TIME; // acknowledge interrupt handled // save last time value alt_irq_register( TIMER_IRQ, NULL, (void*)handle_timer_interrupts ); TIMER->control.bits.ITO = 1; // activate timer interrupts while (1) if ( SYSTIME!= LAST_TIME ) // has time changed SEVEN_SEG->data = SYSTIME; // show count in hex LAST_TIME = SYSTIME; // get new time benchmark return 0; - 5 -

6 // int5.c JTAG UART Interrupts #include "sys/alt_irq.h" #include "unistd.h" // for usleep typedef unsigned int REGISTER; typedef unsigned int BITS; struct PIO_REGS REGISTER direction; REGISTER intmask; REGISTER edgecapture; ; // data register // direction register // interrupt mask register // edge capture register union JTAG_UART_DATA_REG struct BITS data : 8; BITS unused : 7; BITS rvalid : 1; BITS ravail : 16; bits; ; union JTAG_UART_CONTROL_REG struct BITS RE : 1; BITS WE : 1; BITS fill_1 : 6; BITS RI : 1; BITS WI : 1; BITS AC : 1; BITS fill_2 : 5; BITS wspace : 16; bits; ; struct JTAG_UART_REGS union JTAG_UART_DATA_REG data; union JTAG_UART_CONTROL_REG control; ; struct PIO_REGS *SEVEN_SEG = (struct PIO_REGS *)(SEVENSEG_LED_BASE 0x ); struct JTAG_UART_REGS *JUART = (struct JTAG_UART_REGS *)(JTAG_UART_BASE 0x ); static unsigned char THE_CHAR = 0; void handle_jtag_uart_interrupts() THE_CHAR = JUART->data.bits.data; int main (void) unsigned char LAST_CHAR = 0; // save last character entered alt_irq_register( JTAG_UART_IRQ, NULL, (void*)handle_jtag_uart_interrupts ); JUART->control.data = 0; JUART->control.bits.RE = 1; while (1) if ( THE_CHAR!= LAST_CHAR ) // has character changed? SEVEN_SEG->data = (REGISTER)THE_CHAR; // show character LAST_CHAR = THE_CHAR; // get new character benchmark return 0; - 6 -

7 In the previous three C interrupt examples, it is specialize to just one device ISR. What do you do when you have to service multiple devices? Following is an implementation in C of the generalize solution presented in part 2. Take the source code files provided (in int6 folder) and observe the behavior. This is a good base for you assignment. main.c #include "timer.h" #include "buttons.h" #include "seg7.h" #include "ledr.h" int main (void) unsigned int LAST_TIME; unsigned int LAST_BTNS; // save last time value timer_init(); buttons_init(); // initialise timer ISR // initialise buttons ISR while (1) if ( SYSTIME!= LAST_TIME ) // has time changed seg7_show(systime); // show count in hex LAST_TIME = SYSTIME; // get new time benchmark if ( BTNS!= LAST_BTNS ) LEDR_show(BTNS); LAST_BTNS = BTNS; return 0; // have buttons changed // show buttons // get new buttons benchmark timer.h #ifndef TIMER_H_ #define TIMER_H_ void timer_init(void); extern unsigned int SYSTIME; #endif /*TIMER_H_*/ buttons.h #ifndef BUTTONS_H_ #define BUTTONS_H_ void buttons_init(void); extern unsigned int BTNS; #endif /*BUTTONS_H_*/ - 7 -

8 timer.c // timer.c #include "sys/alt_irq.h" #include "unistd.h" // for usleep #include "timer.h" #include "timer_regs.h" static void handle_timer_interrupts(); // handler is private static struct TIMER_REGS *TIMER = (struct TIMER_REGS *)(TIMER_BASE 0x ); unsigned int SYSTIME = 0; // also defined as extern void timer_init(void) alt_irq_register( TIMER_IRQ, NULL, (void*)handle_timer_interrupts ); TIMER->control.bits.ITO = 1; static void handle_timer_interrupts() SYSTIME++; TIMER->status.bits.TO = 0; // acknowledge interrupt handled buttons.c // buttons.c #include "sys/alt_irq.h" #include "unistd.h" // for usleep #include "buttons.h" #include "pio_regs.h" static void handle_button_interrupts(); // handler is private struct PIO_REGS *BUTTONS = (struct PIO_REGS *)(BUTTONS_BASE 0x ); unsigned int BTNS = 0; // also defined as extern void buttons_init(void) alt_irq_register( BUTTONS_IRQ, NULL, (void*)handle_button_interrupts ); BUTTONS->intmask = 0x5; // 0b101 static void handle_button_interrupts() BTNS = BUTTONS->edgecapture; // get buttons pushed BUTTONS->edgecapture = 0; // acknowledge interrupt handled - 8 -

9 ledr.c // ledr.c #include "ledr.h" #include "pio_regs.h" static struct PIO_REGS *LEDR = (struct PIO_REGS *)(LEDR_BASE 0x ); void LEDR_show(unsigned int val) LEDR->data = val; seg7.c // seg7.c #include "seg7.h" #include "pio_regs.h" static struct PIO_REGS *SEVEN_SEG = (struct PIO_REGS *)(SEVENSEG_LED_BASE 0x ); void seg7_show(unsigned int val) SEVEN_SEG->data = val; ledr.h #ifndef LEDR_H_ #define LEDR_H_ void LEDR_show(unsigned int val); #endif /*LEDR_H_*/ seg7.h #ifndef SEG7_H_ #define SEG7_H_ void seg7_show(unsigned int val); #endif /*SEG7_H_*/ Assignment - Clock Timer Create a routine that utilizes the LCD display to show the time (HRS:MIN:SEC:1/10SEC) on one line (2nd line) and a greetings message on the 1st line (e.g. Good Day! or days until next ECE 332L assignment!). The greetings message and initial time (you pick one) should have default values but you need to be able to update them from values taken from the JTAG UART interface. Input for the greetings message and initial time should be taken from the JTAG UART (stdin). Hint: scanf function. Note that updating the time while the Timer ISR is operational presents the possibility for a race condition. One way to avoid this is to disable the Timer ISR during the time when the time value is being updated. Other things to consider: 1. What internal variable type should be used hold the time value? Where is the limiting factor for your choice (internal value or display)? Justify your choice. 2. Where should the conversion to (HRS:MIN:SEC:1/10SEC) be done? In the ISR or in the display update routine? - 9 -

10 Grading considerations: 1. Does it work as specified or negotiated? (80%) 2. Style or organization. (10%) 3. Code documentation (no report, required a readme file explaining features and how to run it) (10%) For this assignment, you only need to comment out the timer as the following.... void alt_sys_init( void ) // ALTERA_AVALON_TIMER_INIT( TIMER, timer ); ALTERA_AVALON_JTAG_UART_INIT( JTAG_UART, jtag_uart ); ALTERA_AVALON_SPI_INIT( SD_SPI, sd_spi ); ALTERA_AVALON_LCD_16207_INIT( LCD, lcd ); ALTERA_AVALON_UART_INIT( UART, uart ); ALTERA_AVALON_SYSID_INIT( SYSID, sysid );... Figure 4. Disable low-level support for timer (for assignment)

Engineering Design Lab exercise 2 Nios II Processor Software Development

Engineering Design Lab exercise 2 Nios II Processor Software Development Engineering Design Lab exercise 2 Nios II Processor Software Development Note: To do this lab exercise you need the textbook and it s CD. Part 1 Designing systems with embedded processors requires both

More information

ECE332, Week 8. Topics. October 15, Exceptions. Hardware Interrupts Software exceptions

ECE332, Week 8. Topics. October 15, Exceptions. Hardware Interrupts Software exceptions ECE332, Week 8 October 15, 2007 1 Topics Exceptions Hardware Interrupts Software exceptions Unimplemented instructions Software traps Other exceptions 2 1 Exception An exception is a transfer of control

More information

SISTEMI EMBEDDED AA 2012/2013. SOPC Nios II Interval Timer Core

SISTEMI EMBEDDED AA 2012/2013. SOPC Nios II Interval Timer Core SISTEMI EMBEDDED AA 2012/2013 SOPC Nios II Interval Timer Core DE2 Basic Computer Interval timer core (1) Hardware configuration: 32-bit or 64-bit internal counter Two count modes: count down once and

More information

ECE-6170 Embedded Systems Laboratory Exercise 3

ECE-6170 Embedded Systems Laboratory Exercise 3 ECE-6170 Embedded Systems Laboratory Exercise 3 The purpose of this exercise is to learn how to connect simple input and output devices to an FPGA chip and use the Nios II processor to interface with parallel

More information

Objective: Create an interface to the LCD display, internal timer functions, and interface with the SDRAM memory as well as on chip memory.

Objective: Create an interface to the LCD display, internal timer functions, and interface with the SDRAM memory as well as on chip memory. Lab 2 LCD display and external memory interfacing Objective: Create an interface to the LCD display, internal timer functions, and interface with the SDRAM memory as well as on chip memory. Topics Covered:

More information

Tutorial III: Nios II Processor Software Development

Tutorial III: Nios II Processor Software Development CHAPTER 16 Tutorial III: Nios II Processor Software Development The Nios II IDE tool compiles C/C++ code for the Nios II processor and provides an integrated software development environment for Nios II

More information

Embedded Systems. Input/Output Programming

Embedded Systems. Input/Output Programming Embedded Systems Input/Output Programming Dr. Jeff Jackson Lecture 11-1 Outline External I/O devices I/O software Polled waiting loops Interrupt-driven I/O Direct memory access (DMA) Synchronization, transfer

More information

Guidelines for Developing a Nios II HAL Device Driver

Guidelines for Developing a Nios II HAL Device Driver Guidelines for Developing a Nios II HAL Device Driver August 2007, ver. 1.0 Application Note 459 Introduction This application note explains the process of developing and debugging a hardware abstraction

More information

SISTEMI EMBEDDED. (Software) Exceptions and (Hardware) Interrupts. Federico Baronti Last version:

SISTEMI EMBEDDED. (Software) Exceptions and (Hardware) Interrupts. Federico Baronti Last version: SISTEMI EMBEDDED (Software) Exceptions and (Hardware) Interrupts Federico Baronti Last version: 20160410 Exceptions and Interrupts Exception: a transfer of control away from a program s normal flow of

More information

DE0-Nano-SoC Computer System with ARM Cortex-A9. 1 Introduction. 2 DE0-Nano-SoC Computer Contents. 2.1 Hard Processor System. For Quartus Prime 16.

DE0-Nano-SoC Computer System with ARM Cortex-A9. 1 Introduction. 2 DE0-Nano-SoC Computer Contents. 2.1 Hard Processor System. For Quartus Prime 16. DE0-Nano-SoC Computer System with ARM Cortex-A9 For Quartus Prime 16.0 1 Introduction This document describes a computer system that can be implemented on the Altera DE0-Nano-SoC development and education

More information

Basic Computer System for the Altera DE1 Board. 1 Introduction. 2 DE1 Basic Computer Contents. 2.1 Nios II Processor.

Basic Computer System for the Altera DE1 Board. 1 Introduction. 2 DE1 Basic Computer Contents. 2.1 Nios II Processor. Basic Computer System for the Altera DE1 Board For Quartus II 8 1 Introduction This document describes a simple computer system that can be implemented on the Altera DE1 development and education board.

More information

NIOS Interrupts. Interrupts

NIOS Interrupts. Interrupts Interrupts 2 Options for dealing with interrupts Internal Interrupt Controller IIC External Interrupt Controller - EIC The IIC has two versions Legacy API Enhanced API 2 tj On an interrupt or exception

More information

1 Do not confuse the MPU with the Nios II memory management unit (MMU). The MPU does not provide memory mapping or management.

1 Do not confuse the MPU with the Nios II memory management unit (MMU). The MPU does not provide memory mapping or management. Nios II MPU Usage March 2010 AN-540-1.0 Introduction This application note covers the basic features of the Nios II processor s optional memory protection unit (MPU), describing how to use it without the

More information

Basic Computer System for the Altera DE0-Nano Board. 1 Introduction. 2 DE0-Nano Basic Computer Contents. 2.1 Nios II Processor. For Quartus II 13.

Basic Computer System for the Altera DE0-Nano Board. 1 Introduction. 2 DE0-Nano Basic Computer Contents. 2.1 Nios II Processor. For Quartus II 13. Basic Computer System for the Altera DE0-Nano Board For Quartus II 13.0 1 Introduction This document describes a simple computer system that can be implemented on the Altera DE0-Nano development and education

More information

Laboratory Exercise 5

Laboratory Exercise 5 Laboratory Exercise 5 Bus Communication The purpose of this exercise is to learn how to communicate using a bus. In the designs generated by using Altera s SOPC Builder, the Nios II processor connects

More information

Nios Soft Core. Nios Timer Peripheral. Altera Corporation 101 Innovation Drive San Jose, CA (408)

Nios Soft Core. Nios Timer Peripheral. Altera Corporation 101 Innovation Drive San Jose, CA (408) Nios Soft Core Nios Timer Peripheral Altera Corporation 101 Innovation Drive San Jose, CA 95134 (408) 544-7000 http://www.altera.com Nios Soft Core Nios Timer Peripheral Version 1.1 August 2000 Altera,

More information

Disassemble the machine code present in any memory region. Single step through each assembly language instruction in the Nios II application.

Disassemble the machine code present in any memory region. Single step through each assembly language instruction in the Nios II application. Nios II Debug Client This tutorial presents an introduction to the Nios II Debug Client, which is used to compile, assemble, download and debug programs for Altera s Nios II processor. This tutorial presents

More information

Guidelines for Developing a Nios II HAL Device Driver

Guidelines for Developing a Nios II HAL Device Driver Guidelines for Developing a Nios II HAL Device Driver AN-459-4.0 Application Note This application note explains the process of creating and debugging a hardware abstraction layer (HAL) software device

More information

DKAN0011A Setting Up a Nios II System with SDRAM on the DE2

DKAN0011A Setting Up a Nios II System with SDRAM on the DE2 DKAN0011A Setting Up a Nios II System with SDRAM on the DE2 04 November 2009 Introduction This tutorial details how to set up and instantiate a Nios II system on Terasic Technologies, Inc. s DE2 Altera

More information

Using HAL Device Drivers with the Altera Monitor Program. 1 Introduction. For Quartus II 13.1

Using HAL Device Drivers with the Altera Monitor Program. 1 Introduction. For Quartus II 13.1 Using HAL Device Drivers with the Altera Monitor Program For Quartus II 13.1 1 Introduction This tutorial shows how to develop C programs that use device driver functions for the I/O devices in a Nios

More information

9. PIO Core. Core Overview. Functional Description

9. PIO Core. Core Overview. Functional Description 9. PIO Core NII51007-9.0.0 Core Overview The parallel input/output (PIO) core with Avalon interface provides a memory-mapped interface between an Avalon Memory-Mapped (Avalon-MM) slave port and general-purpose

More information

University of Massachusetts Amherst Computer Systems Lab 1 (ECE 354) LAB 1 Reference Manual

University of Massachusetts Amherst Computer Systems Lab 1 (ECE 354) LAB 1 Reference Manual University of Massachusetts Amherst Computer Systems Lab 1 (ECE 354) LAB 1 Reference Manual Lab 1: Using NIOS II processor for code execution on FPGA Objectives: 1. Understand the typical design flow in

More information

SISTEMI EMBEDDED AA 2014/2015

SISTEMI EMBEDDED AA 2014/2015 SISTEMI EMBEDDED AA 2014/2015 (So2ware) Excep;ons and (Hardware) Interrupts Federico Baron; Example of a Nios II System External Interrupt Controller Nios II Processor Core Architecture Reset signals Excep;ons

More information

AN 459: Guidelines for Developing a Nios II HAL Device Driver

AN 459: Guidelines for Developing a Nios II HAL Device Driver AN 459: Guidelines or Developing a Nios II HAL Device Driver November 2008 AN-459-2.0 Introduction This application note explains the process o developing and debugging a hardware abstraction layer (HAL)

More information

ECE 362 Lab Verification / Evaluation Form Experiment 5

ECE 362 Lab Verification / Evaluation Form Experiment 5 ECE 362 Lab Verification / Evaluation Form Experiment 5 Evaluation: IMPORTANT! You must complete this experiment during your scheduled lab perior. All work for this experiment must be demonstrated and

More information

DE1-SoC Computer System with ARM Cortex-A9. 1 Introduction. 2 DE1-SoC Computer Contents. 2.1 Hard Processor System. For Quartus Prime 16.

DE1-SoC Computer System with ARM Cortex-A9. 1 Introduction. 2 DE1-SoC Computer Contents. 2.1 Hard Processor System. For Quartus Prime 16. DE1-SoC Computer System with ARM Cortex-A9 For Quartus Prime 16.1 1 Introduction This document describes a computer system that can be implemented on the Intel DE1-SoC development and education board.

More information

Designing with Nios II. Exercise Manual

Designing with Nios II. Exercise Manual Designing with Nios II Exercise Manual Lab 1 Creating a Nios II System 2 Hardware set up requirements: ByteBlaster, ByteBlaster II, Byte Blaster MV, or USB-Blaster connected between computer and ByteBlaster

More information

Section IV. Reference Material

Section IV. Reference Material Section IV. Reference Material This section provides a comprehensive reference to the Nios II hardware abstraction layer (HAL) application program interface (API) and the utilities, scripts, and settings

More information

Laboratory Exercise 4

Laboratory Exercise 4 Laboratory Exercise Input/Output in an Embedded System The purpose of this exercise is to investigate the use of devices that provide input and output capabilities for a processor. There are two basic

More information

Interrupt handling. Purpose. Interrupts. Computer Organization

Interrupt handling. Purpose. Interrupts. Computer Organization Namn: Laborationen godkänd: Computer Organization Interrupt handling Purpose The purpose of this lab assignment is to give an introduction to interrupts, i.e. asynchronous events caused by external devices

More information

DE2-115 Computer System. 1 Introduction. 2 DE2-115 Computer Contents. 2.1 Nios II Processor. For Quartus Prime 16.1

DE2-115 Computer System. 1 Introduction. 2 DE2-115 Computer Contents. 2.1 Nios II Processor. For Quartus Prime 16.1 DE2-115 Computer System For Quartus Prime 16.1 1 Introduction This document describes a computer system that can be implemented on the Intel DE2-115 development and education board. This system, called

More information

NIOS CPU Based Embedded Computer System on Programmable Chip

NIOS CPU Based Embedded Computer System on Programmable Chip 1 Objectives NIOS CPU Based Embedded Computer System on Programmable Chip EE8205: Embedded Computer Systems This lab has been constructed to introduce the development of dedicated embedded system based

More information

Section III. Advanced Programming Topics

Section III. Advanced Programming Topics Section III. Advanced Programming Topics This section provides inormation about several advanced embedded programming topics. It includes the ollowing chapters: Chapter 8, Exception Handling Chapter 9,

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T001A: A Qsys based Nios II Reference design with a simple self test of the HyperFlash and HyperRAM device using S/Labs' HBMC IP This tutorial

More information

Excellent for XIP applications"

Excellent for XIP applications Synaptic Labs' Tiny System Cache (CMS-T003) Tutorial T001A: Boot from On-chip Flash: A Qsys based Nios II Reference design based on S/Labs' Tiny System Cache IP and Intel's On-chip Flash Memory Controller

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T005B: A Qsys based Nios II Reference design with a simple application running from HyperFlash and HyperRAM device using S/Labs' HBMC IP. The HyperRAM

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T005C: A Qsys based Nios II Reference design with a simple HyperFlash test device using S/Labs' HBMC IP and S/Labs' Memory Region Mapper IP This

More information

Nios Timer. General Description. Functional Description

Nios Timer. General Description. Functional Description Nios Timer July 2003, Version 3.2 Data Sheet General Description Functional Description The Nios Timer module is an Altera SOPC Builder library component included in the Nios development kit. This SOPC

More information

University of Massachusetts Amherst Computer Systems Lab 2 (ECE 354) Spring Lab 1: Using Nios 2 processor for code execution on FPGA

University of Massachusetts Amherst Computer Systems Lab 2 (ECE 354) Spring Lab 1: Using Nios 2 processor for code execution on FPGA University of Massachusetts Amherst Computer Systems Lab 2 (ECE 354) Spring 2007 Lab 1: Using Nios 2 processor for code execution on FPGA Objectives: After the completion of this lab: 1. You will understand

More information

Introduction to the Altera Qsys System Integration Tool. 1 Introduction. For Quartus Prime 15.1

Introduction to the Altera Qsys System Integration Tool. 1 Introduction. For Quartus Prime 15.1 Introduction to the Altera Qsys System Integration Tool For Quartus Prime 15.1 1 Introduction This tutorial presents an introduction to Altera s Qsys system integration tool, which is used to design digital

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T001: A Qsys based Nios II Reference design with HelloWorld test running in HyperRAM device using S/Labs' HBMC IP This tutorial describes a simple

More information

Upgrading Nios Processor Systems to the Nios II Processor

Upgrading Nios Processor Systems to the Nios II Processor Upgrading Nios Processor Systems to the Nios II Processor July 2006 - ver 1.1 Application Note 350 Overview Audience The purpose of this document is to guide you through the process of migrating to the

More information

Lesson 09: SD Card Interface

Lesson 09: SD Card Interface Lesson 09: SD Card Interface 1. Introduction A Secure Data (SD) card is a data storage device that can be used as massive storage in an embedded system. We will introduce a method to access data on a SD

More information

Practical Hardware Debugging: Quick Notes On How to Simulate Altera s Nios II Multiprocessor Systems Using Mentor Graphics ModelSim

Practical Hardware Debugging: Quick Notes On How to Simulate Altera s Nios II Multiprocessor Systems Using Mentor Graphics ModelSim Practical Hardware Debugging: Quick Notes On How to Simulate Altera s Nios II Multiprocessor Systems Using Mentor Graphics ModelSim Ray Duran Staff Design Specialist FAE, Altera Corporation 408-544-7937

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T002A: A Qsys based Nios II reference design using Intel s MSGDMA to benchmark memory copy operations on the HyperRAM device using S/Labs' HBMC

More information

HyperBus Memory Controller (HBMC) Tutorial

HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T002A: A Qsys based Nios II reference design using Intel s MSGDMA to benchmark memory copy operations on the HyperRAM device using S/Labs' HBMC

More information

Synaptic Labs HyperBus Memory Controller (HBMC) Tutorial for Intel FPGA devices

Synaptic Labs HyperBus Memory Controller (HBMC) Tutorial for Intel FPGA devices Benjamin Gittins Chief Technical Officer Mbl: +995 551 026 588 b.gittins@synaptic-labs.com Synaptic Laboratories Ltd. Company ID 41272593 www.synaptic-labs.com info@synaptic-labs.com Monday, July 16, 2018

More information

Nios II Classic Software Developer s Handbook

Nios II Classic Software Developer s Handbook Nios II Classic Software Developer s Handbook Subscribe NII5V2 101 Innovation Drive San Jose, CA 95134 www.altera.com TOC-2 Contents Overview of Nios II Embedded Development...1-1 Prerequisites for Understanding

More information

SISTEMI EMBEDDED. The C Pre-processor Fixed-size integer types Bit Manipulation. Federico Baronti Last version:

SISTEMI EMBEDDED. The C Pre-processor Fixed-size integer types Bit Manipulation. Federico Baronti Last version: SISTEMI EMBEDDED The C Pre-processor Fixed-size integer types Bit Manipulation Federico Baronti Last version: 20180312 The C PreProcessor CPP (1) CPP is a program called by the compiler that processes

More information

Tutorial of Interfacing with RS232 UART

Tutorial of Interfacing with RS232 UART Tutorial of Interfacing with RS232 UART Kwan Yin Lau (group 3) Feb 7, 2014 Introduction This tutorial will demonstrate how to interface the RS232 UART port on the Altera DE2 board in order to send and

More information

Nios II Classic Software Developer s Handbook

Nios II Classic Software Developer s Handbook Nios II Classic Software Developer s Handbook Subscribe NII5V2 101 Innovation Drive San Jose, CA 95134 www.altera.com TOC-2 Contents Overview of Nios II Embedded Development...1-1 Prerequisites for Understanding

More information

Laboratory Exercise 7

Laboratory Exercise 7 Laboratory Exercise 7 Using Interrupts with C code The purpose of this exercise is to investigate the use of interrupts for the Nios II processor, using C code. To do this exercise you need to have a good

More information

SISTEMI&EMBEDDED& AA&2013/2014&

SISTEMI&EMBEDDED& AA&2013/2014& SISTEMI&EMBEDDED& AA&2013/2014& SOPC&Nios&II& Interval&Timer&Core& Federico&BaronB& DE2&Basic&Computer& Interval&Bmer&core&(1)& Hardware&configuraBon:& 32#bit'or'64#bit'internal&counter' Two&count&modes:&count&down&once&and&conBnuous&countL

More information

IS1200/IS1500 Computer Engineering

IS1200/IS1500 Computer Engineering IS1200/IS1500 Computer Engineering Laboratory Exercise nios2int Interrupts and Traps Incomplete work is only valid until 2015-05-31 Student's name in permanent ink: Latest update: 2014-11-06 Date: Demonstrations

More information

NIOS CPU Based Embedded Computer System on Programmable Chip

NIOS CPU Based Embedded Computer System on Programmable Chip NIOS CPU Based Embedded Computer System on Programmable Chip EE8205: Embedded Computer Systems NIOS-II SoPC: PART-II 1 Introduction This lab has been constructed to introduce the development of dedicated

More information

Graduate Institute of Electronics Engineering, NTU Advanced VLSI SOPC design flow

Graduate Institute of Electronics Engineering, NTU Advanced VLSI SOPC design flow Advanced VLSI SOPC design flow Advisor: Speaker: ACCESS IC LAB What s SOC? IP classification IP reusable & benefit Outline SOPC solution on FPGA SOPC design flow pp. 2 What s SOC? Definition of SOC Advantage

More information

Introduction to the Altera SOPC Builder Using Verilog Designs. 1 Introduction

Introduction to the Altera SOPC Builder Using Verilog Designs. 1 Introduction Introduction to the Altera SOPC Builder Using Verilog Designs 1 Introduction This tutorial presents an introduction to Altera s SOPC Builder software, which is used to implement a system that uses the

More information

UNIVERSITY OF CONNECTICUT. ECE 3411 Microprocessor Application Lab: Fall Quiz II

UNIVERSITY OF CONNECTICUT. ECE 3411 Microprocessor Application Lab: Fall Quiz II Department of Electrical and Computing Engineering UNIVERSITY OF CONNECTICUT ECE 3411 Microprocessor Application Lab: Fall 2015 Quiz II There are 5 questions in this quiz. There are 9 pages in this quiz

More information

CSE 303 Winter 2008 Midterm Key

CSE 303 Winter 2008 Midterm Key CSE 303 Winter 2008 Midterm Key 1. [2 points] Give a Unix command line that will list all (and only) files that end with.h in the current working directory. Full credit: ls *.h Extra credit: ls a *.h (although

More information

CS 580 FINAL EXAM. Fall April 29, 2014

CS 580 FINAL EXAM. Fall April 29, 2014 CS 580 FINAL EXAM Fall 201 April 29, 2014 You are to build a range tree for your final exam. A range tree is a tree where each node contains a minimum and a maximum value as well as a linked list to store

More information

Laboratory Exercise 3 Comparative Analysis of Hardware and Emulation Forms of Signed 32-Bit Multiplication

Laboratory Exercise 3 Comparative Analysis of Hardware and Emulation Forms of Signed 32-Bit Multiplication Laboratory Exercise 3 Comparative Analysis of Hardware and Emulation Forms of Signed 32-Bit Multiplication Introduction All processors offer some form of instructions to add, subtract, and manipulate data.

More information

Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial

Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial Synaptic Labs' HyperBus Memory Controller (HBMC) Tutorial T001B: A Qsys based Nios II reference design with a simple Memory Bandwidth Benchmark of the HyperRAM device using S/Labs' HBMC IP This tutorial

More information

Building A Custom System-On-A-Chip

Building A Custom System-On-A-Chip Building A Custom System-On-A-Chip Only a few years ago, we could only dream about building our very own custom microprocessor system on a chip. The manufacturing cost for producing a custom chip is just

More information

ERIKA Enterprise Multicore Tutorial. for the Altera Nios II platform

ERIKA Enterprise Multicore Tutorial. for the Altera Nios II platform ERIKA Enterprise Multicore Tutorial for the Altera Nios II platform version: 1.0.1 May 27, 2009 About Evidence S.r.l. Evidence is a spin-off company of the ReTiS Lab of the Scuola Superiore S. Anna, Pisa,

More information

System Cache (CMS-T002/CMS-T003) Tutorial

System Cache (CMS-T002/CMS-T003) Tutorial Synaptic Labs' System Cache (CMS-T002/CMS-T003) Tutorial T006A: Arduino Style Nios II/e embedded system: A Qsys Nios II Reference design based on S/Labs' HBMC IP and S/Labs' System Cache for accelerating

More information

NIOS CPU Based Embedded Computer System on Programmable Chip

NIOS CPU Based Embedded Computer System on Programmable Chip NIOS CPU Based Embedded Computer System on Programmable Chip 1 Lab Objectives EE8205: Embedded Computer Systems NIOS-II SoPC: PART-I This lab has been constructed to introduce the development of dedicated

More information

Using Tightly Coupled Memory with the Nios II Processor

Using Tightly Coupled Memory with the Nios II Processor Using Tightly Coupled Memory with the Nios II Processor TU-N2060305-1.2 This document describes how to use tightly coupled memory in designs that include a Nios II processor and discusses some possible

More information

Pre-Lab due: at 3 p.m. Post-Lab due: at 5 p.m. Name:... Forename:... Initials:...

Pre-Lab due: at 3 p.m. Post-Lab due: at 5 p.m. Name:... Forename:... Initials:... 151-0593-00 Embedded Control Systems (Fall 2018) Lab 1 Topic: Familiarization and Digital I/O Pre-Lab due: 10. 09. 18 at 3 p.m. Post-Lab due: 11. 09. 18 at 5 p.m. Name:... Forename:... Initials:... marianne.schmid@idsc.mavt.ethz.ch,

More information

ERIKA Enterprise LWIP Tutorial

ERIKA Enterprise LWIP Tutorial ERIKA Enterprise LWIP Tutorial for the Altera Nios II platform version: 1.0.1 December 11, 2012 About Evidence S.r.l. Evidence is a spin-off company of the ReTiS Lab of the Scuola Superiore S. Anna, Pisa,

More information

C Concepts - I/O. Lecture 19 COP 3014 Fall November 29, 2017

C Concepts - I/O. Lecture 19 COP 3014 Fall November 29, 2017 C Concepts - I/O Lecture 19 COP 3014 Fall 2017 November 29, 2017 C vs. C++: Some important differences C has been around since around 1970 (or before) C++ was based on the C language While C is not actually

More information

ECE332, Week 2, Lecture 3. September 5, 2007

ECE332, Week 2, Lecture 3. September 5, 2007 ECE332, Week 2, Lecture 3 September 5, 2007 1 Topics Introduction to embedded system Design metrics Definitions of general-purpose, single-purpose, and application-specific processors Introduction to Nios

More information

ECE332, Week 2, Lecture 3

ECE332, Week 2, Lecture 3 ECE332, Week 2, Lecture 3 September 5, 2007 1 Topics Introduction to embedded system Design metrics Definitions of general-purpose, single-purpose, and application-specific processors Introduction to Nios

More information

CprE 288 Introduction to Embedded Systems Exam 1 Review. 1

CprE 288 Introduction to Embedded Systems Exam 1 Review.  1 CprE 288 Introduction to Embedded Systems Exam 1 Review http://class.ece.iastate.edu/cpre288 1 Overview of Today s Lecture Announcements Exam 1 Review http://class.ece.iastate.edu/cpre288 2 Announcements

More information

ECE254 Lab3 Tutorial. Introduction to MCB1700 Hardware Programming. Irene Huang

ECE254 Lab3 Tutorial. Introduction to MCB1700 Hardware Programming. Irene Huang ECE254 Lab3 Tutorial Introduction to MCB1700 Hardware Programming Irene Huang Lab3 Requirements : API Dynamic Memory Management: void * os_mem_alloc (int size, unsigned char flag) Flag takes two values:

More information

Homework. Reading. Machine Projects. Labs. Intel 8254 Programmable Interval Timer (PIT) Data Sheet. Continue on MP3

Homework. Reading. Machine Projects. Labs. Intel 8254 Programmable Interval Timer (PIT) Data Sheet. Continue on MP3 Homework Reading Intel 8254 Programmable Interval Timer (PIT) Data Sheet Machine Projects Continue on MP3 Labs Continue in labs with your assigned section 1 Restrictions on ISR Code Software that was executing

More information

This resource describes how to program the myrio in C to perform timer interrupts.

This resource describes how to program the myrio in C to perform timer interrupts. Resource 07 Timer interrupts This resource describes how to program the myrio in C to perform timer interrupts. C.07.1 Main thread: background Initializing the timer interrupt is similar to initializing

More information

Profiling Nios II Systems

Profiling Nios II Systems February 2006, ver. 1.2 Application Note 391 Introduction This application note describes a variety of ways to measure the performance of a Nios II system with three tools: the GNU profiler, called nios2-elf-gprof,

More information

ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University

ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University Prof. Sunil Khatri TA: Monther Abusultan (Lab exercises created by A. Targhetta / P. Gratz)

More information

Introduction to the Altera SOPC Builder Using Verilog Design

Introduction to the Altera SOPC Builder Using Verilog Design Introduction to the Altera SOPC Builder Using Verilog Design This tutorial presents an introduction to Altera s SOPC Builder software, which is used to implement a system that uses the Nios II processor

More information

Codewarrior for ColdFire (Eclipse) 10.0 Setup

Codewarrior for ColdFire (Eclipse) 10.0 Setup Codewarrior for ColdFire (Eclipse) 10.0 Setup 1. Goal This document is designed to ensure that your Codewarrior for Coldfire v10.0 environment is correctly setup and to orient you to it basic functionality

More information

Synaptic Labs (S/Labs) HyperBus Memory Controller (HBMC) Tutorial for Intel FPGA devices

Synaptic Labs (S/Labs) HyperBus Memory Controller (HBMC) Tutorial for Intel FPGA devices Benjamin Gittins Chief Technical Officer Mbl: +995 551 026 588 b.gittins@synaptic-labs.com Synaptic Laboratories Ltd. Company ID 41272593 www.synaptic-labs.com info@synaptic-labs.com Monday, July 16, 2018

More information

ECE4530 Fall 2015: The Codesign Challenge I Am Seeing Circles. Application: Bresenham Circle Drawing

ECE4530 Fall 2015: The Codesign Challenge I Am Seeing Circles. Application: Bresenham Circle Drawing ECE4530 Fall 2015: The Codesign Challenge I Am Seeing Circles Assignment posted on Thursday 11 November 8AM Solutions due on Thursday 3 December 8AM The Codesign Challenge is the final assignment in ECE

More information

Design of Embedded Hardware and Firmware

Design of Embedded Hardware and Firmware Design of Embedded Hardware and Firmware Introduction on "System On Programmable Chip" NIOS II Avalon Bus - DMA Andres Upegui Laboratoire de Systèmes Numériques hepia/hes-so Geneva, Switzerland Embedded

More information

Non-Volatile Configuration Scheme for the Stratix II EP2S60 DSP Development Board

Non-Volatile Configuration Scheme for the Stratix II EP2S60 DSP Development Board Non-Volatile Configuration Scheme for the Stratix II EP2S60 DSP Development Board Qian Liu and S.W. Ellingson October 21, 2008 The Stratix II DSP development board (DSP board) has provided a non-volatile

More information

SISTEMI EMBEDDED AA 2012/2013 JTAG CIRCUITRY JTAG DEBUG MODULE JTAG-UART PERIPHERAL

SISTEMI EMBEDDED AA 2012/2013 JTAG CIRCUITRY JTAG DEBUG MODULE JTAG-UART PERIPHERAL SISTEMI EMBEDDED AA 2012/2013 JTAG CIRCUITRY JTAG DEBUG MODULE JTAG-UART PERIPHERAL Joint Test Action Group (JTAG) (1) Established in 1985 to develop a method to test populated PCBs A way to access IC

More information

NIOS II Pixel Display

NIOS II Pixel Display NIOS Pixel Display SDRAM 512Mb Clock Reset_bar CPU Onchip Memory External Memory Controller JTAG UART Pixel DMA Resampler Scaler Dual Port FIFO VGA Controller Timer System ID VGA Connector PLL 2 tj SDRAM

More information

SISTEMI EMBEDDED. The C Pre-processor Fixed-size integer types Bit Manipulation. Federico Baronti Last version:

SISTEMI EMBEDDED. The C Pre-processor Fixed-size integer types Bit Manipulation. Federico Baronti Last version: SISTEMI EMBEDDED The C Pre-processor Fixed-size integer types Bit Manipulation Federico Baronti Last version: 20160302 The C PreProcessor CPP (1) CPP is a program called by the compiler that processes

More information

Simulating Nios II Embedded Processor Designs

Simulating Nios II Embedded Processor Designs Simulating Nios II Embedded Processor Designs May 2004, ver.1.0 Application Note 351 Introduction The increasing pressure to deliver robust products to market in a timely manner has amplified the importance

More information

Designing with Nios II and SOPC Builder

Designing with Nios II and SOPC Builder Designing with Nios II and SOPC Builder Copyright Altera Corporation The Programmable Solutions Company Devices Stratix II Stratix Stratix GX Cyclone II Cyclone MAX II Devices (continued) Mercury Devices

More information

NIOS Character. Last updated 7/16/18

NIOS Character. Last updated 7/16/18 NIOS Character Last updated 7/16/18 Character Buffer Block Diagram CLK RST Clock Reset_bar CLK RST PLL 25MHz* CPU Onchip Memory JTAG UART Timer System ID S M S S S S S M S Character Buffer DMA Dual Port

More information

Creating Multiprocessor Nios II Systems Tutorial

Creating Multiprocessor Nios II Systems Tutorial Creating Multiprocessor Nios II Systems Tutorial May 2006, Version 6.0 Tutorial Introduction...2 Benefits of Multiprocessor Systems...2 Nios II Multiprocessor Systems...2 Hardware Design Considerations...3

More information

E 332L Microprocessors Lab (Fall 2007) Week 3

E 332L Microprocessors Lab (Fall 2007) Week 3 E 332L Microprocessors Lab (Fall 2007) Week 3 Objective: In this lab, you will learn how to interface to LEDs, Seven Segment LEDs, and switches. You will also learn how to write assembly suoutines. Note

More information

Micrium OS Kernel Labs

Micrium OS Kernel Labs Micrium OS Kernel Labs 2018.04.16 Micrium OS is a flexible, highly configurable collection of software components that provides a powerful embedded software framework for developers to build their application

More information

embos Real Time Operating System CPU & Compiler specifics for RENESAS SH2 CPUs and RENESAS HEW4 Document Rev. 1

embos Real Time Operating System CPU & Compiler specifics for RENESAS SH2 CPUs and RENESAS HEW4 Document Rev. 1 embos Real Time Operating System CPU & Compiler specifics for RENESAS SH2 CPUs and RENESAS HEW4 Document Rev. 1 A product of Segger Microcontroller Systeme GmbH www.segger.com 2/25 embos for SH2 CPUs and

More information

Nios II Software Developer Handbook

Nios II Software Developer Handbook Nios II Software Developer Handbook 101 Innovation Drive San Jose, CA 95134 (408) 544-7000 http://www.altera.com Preliminary Information NII5V2-5.0 Copyright 2005 Altera Corporation. All rights reserved.

More information

Debugging Nios II Systems with the SignalTap II Logic Analyzer

Debugging Nios II Systems with the SignalTap II Logic Analyzer Debugging Nios II Systems with the SignalTap II Logic Analyzer May 2007, ver. 1.0 Application Note 446 Introduction As FPGA system designs become more sophisticated and system focused, with increasing

More information

CprE 288 Spring 2014 Homework 5 Due Fri. Feb. 21

CprE 288 Spring 2014 Homework 5 Due Fri. Feb. 21 CprE 288 Spring 2014 Homework 5 Due Fri. Feb. 21 Notes: Homework answers must be typed using a word editor. Homework is individual work. Adhere to the University s policy relating to the integrity of scholarship.

More information

CS 3803 Lab 6 Interrupts Assigned 2/25/10 Point Value: 30

CS 3803 Lab 6 Interrupts Assigned 2/25/10 Point Value: 30 CS 3803 Lab 6 Interrupts Assigned 2/25/10 Point Value: 30 Purpose Interrupts are crucial to an operating system. They are used to get status and data from the timer, keyboard, and disk drives to mention

More information

By the end of Class. Outline. Homework 5. C8051F020 Block Diagram (pg 18) Pseudo-code for Lab 1-2 due as part of prelab

By the end of Class. Outline. Homework 5. C8051F020 Block Diagram (pg 18) Pseudo-code for Lab 1-2 due as part of prelab By the end of Class Pseudo-code for Lab 1-2 due as part of prelab Homework #5 on website due before next class Outline Introduce Lab 1-2 Counting Timers on C8051 Interrupts Laboratory Worksheet #05 Copy

More information

Laboratory Exercise 6

Laboratory Exercise 6 Laboratory Exercise 6 Using C code with the Nios II Processor This is an exercise in using C code with the Nios II processor in a DE-Series computer system. We will use the Intel FPGA Monitor Program software

More information