general midi explorer instructor and uga presentation, and demo professor sandip kundu fall 2014 ece...
TRANSCRIPT
General MIDI ExplorerInstructor and UGA Presentation,
and DemoProfessor Sandip Kundu
Fall 2014
ECE 353 Lab D
ECE353: 2 Computer Systems Lab 1 Kundu
Lab DGeneral MIDI Explorer with Record/Playback
Getting Started
ECE353: 3 Computer Systems Lab 1 Kundu
Where Are We?
Lab A Cache Simulator in C• C programming, data structures• Cache architecture and analysis
Lab B MIDI Receiver• Hardware design • Proper Verilog Coding• Functional Simulation, GoLogic, MIDI-Ox
Lab C Pipelined Machine• C programming, data structures• Pipeline architecture and analysis
Lab D General MIDI Explorer with Record/Playback• Microcontroller programming
• C and Assembly (optional for 10% extra credit)
ECE353: 4 Computer Systems Lab 1 Kundu
Perspective
• As an engineer you often have multiple choices for implementation
• What you do will depend on performance and cost requirements
• Use a CPLD, FPGA, ASIC/microprocessor, or microcontroller
• Write it in Verilog (CPLD, FPGA, ASIC) => Lab B• Write it in C or ASM => Lab D
ECE353: 5 Computer Systems Lab 1 Kundu
When to use: PLDs, FPGAs, ASICs, Structured ASICs• Programmable logic devices (PLDs) provide low/medium density
logic.
• Field-programmable gate arrays (FPGAs) provide more logic and multi-level logic. Advanced peripheral support.
• Application-specific integrated circuits (ASICs) are manufactured for a single purpose. Typically built with standard cells implementing gates. Higher performance vs. FPGAs.
• Structured ASICs are in between FPGAs and ASIC in density & performance. Typically wire together cells that are pre-built and exist in island configurations.
ECE353: 6 Computer Systems Lab 1 Kundu
Differences between microcontrollers, microprocessors and FPGA systems for running software
FPGA systems often contain CPUs in softcore (synthesized) or hardcore (part of die) format but can also contain logic blocks for other hardware, e.g., state machines, etc
• 45-65 nm FPGAs (Virtex 5-7) can achieve high performance.
Microcontrollers are more limited in functionality and often do not include support for virtual memory and caches
• Up to 50MHz
Microprocessors are higher performance capable and have typically virtual memory support
• From 50MHz to GHz
TxTx
RxRx
DiscreteDiscretePHYPHY
DiscreteDiscretePHYPHY
TxTx
RxRx
Soft coreSoft core
Hard core with built-in
Transceivers
Hard core with built-in
Transceivers
ECE353: 7 Computer Systems Lab 1 Kundu
Lab D Objectives
• Exposure to microcontroller programming vs. design of hardware• Compiled Language (C)
• Data Structure in Memory• Talking to UART, Timer
• Assembly Language (ASM) - optional• Talking to A/D converter, Timer, UART
• Continuation of MIDI theme• Serial communication• Notes and instruments
• Complete system with MIDI – FUN! with input, output, storage
ECE353: 8 Computer Systems Lab 1 Kundu
Lab D Requirements
• Part 1: C Program• Send & Receive MIDI Messages• Play and Recording Modes• Store and Replay MIDI Messages
• Part 2: ASM Program (optional for extra credit)• Vary speed of messages via hex switch• Instrument / Note / Velocity via photo cells• Change channels between Percussion & Instrument
ECE353: 9 Computer Systems Lab 1 Kundu
AVR Components Used
• In Part 1 (C Program)• Data EEPROM (Storage)• USART (Communication)• Timer1 (Counter)
• In Part 2 (ASM Program) • Timer1 (Counter)• USART (Communication)• ADC (Analog to Digital Converter)• Will manipulate these components using AVR assembly.
ECE353: 10 Computer Systems Lab 1 Kundu
ATmega32 AVR
• 16MHz CMOS 8-bit microcontroller with AVR RISC instruction set
• 32 general purpose registers
• 32KB of Flash
• 2Kb internal SRAM
• 1KB E2PROM – 100,000 erase cycles
• 8 and 16 bit counters
• USART
• 8-bit ADC
• JTAG
• ….
ECE353: 11 Computer Systems Lab 1 Kundu
Board Demonstration
ECE353: 12 Computer Systems Lab 1 Kundu
Wired Board
ECE353: 13 Computer Systems Lab 1 Kundu
Part 1 – C Program
• Develop, program AVR through JTAG, for:
• Getting MIDI messages through the Midi OX from the PC serially
• Similar to Lab B but using AVR Studio and AVR gcc compiler – to receive
To PC
Play Switch
Record Switch
Transmit
Input
Input
AT
Me
ga3
2C Program Block Diagram
From PC Receive
EEPROM DATA
USART
ECE353: 14 Computer Systems Lab 1 Kundu
Part 1 – C Program contd.
• Once received in AVR, store in E2PROM if switch set to Record
• Compress/decompress before/after storing - you can use any algorithm you find suitable
• Record timing also so that you can replay exactly the same way
• If switch set to Playback, play back
• Incoming signal optically isolated from PC
To PC
Play Switch
Record Switch
Transmit
Input
Input
AT
Me
ga3
2
C Program Block DiagramFrom PC Receive
EEPROM DATA
USART
ECE353: 15 Computer Systems Lab 1 Kundu
Compression
• Why compress?• Store more data in same persistent memory• Persistent data limited in # of erase cycles• Save on bandwidth when communicating in some apps
• Lossless compression (LZ, Huffman, RLE):• Decompress and get the same data, bit - for - bit
• Lossy compression (JPEG,…):• Decompress and get something *similar*.• Any amount of compression is possible.
• Tradeoff between quality and compression.
• Domain specific • You may understand the pattern, e.g., in the case of MIDI
messages there is a repetition that could be exploited.
ECE353: 16 Computer Systems Lab 1 Kundu
Example: Run Length Encoding (RLE)
• Very simple lossless encoding of repeating patterns
• Example: Imagine a stream of bits with many 0s and 1s • Source: 000000000111111110001111111• RLE Version: 9Zeros8Ones3Zeros7Ones
• Can be transformed into a sequence of 1s and 0s but we often limit the encoding of the maximum sequence value to avoid too much overhead for very random sequences.
• Say we limit to maximum 16 repetition of 1s or 0s: represent with 4 bits
• 1001(0)1000(1)0011(0)0111(1) for the above sequence
• Best we get is minimum 5 bits needed for a sequence of length 16, or a compression ratio of 16/5
• 111111111111111 => 1111(1)• Worst we get an overhead of how much?
• To avoid, change algorithm to have a first bit encode WHEN RLE is used
• RLE can be applied at various granularities
ECE353: 17 Computer Systems Lab 1 Kundu
Example of lossy compression - JPEG compression
Very high quality: compression = 2.33Photoshop Image
Very low quality: compression = 115Produced by MATLABwith Quality = 0
ECE353: 18 Computer Systems Lab 1 Kundu
For Part 1 you need to figure out how to
• Initialize the USART• Set baud rate for midi
• Enable the receiver and transmitter
• Initialize to 8 data bits, 1 stop, and 1 stop bit
• Create functions for receive, transmit, and flush USART• Create functions to read and write E2PROM• Work with timers and interrupts
• Use 16-bit counter and generate interrupts for overflows; need to setup ISR (interrupt service routine)
• Main function• Use LEDs to debug, try something simple first• All information is in AVR datasheet; sample codes
ECE353: 19 Computer Systems Lab 1 Kundu
Part 2 – AVR ASM Program
• Develop, program AVR through JTAG
• Use the three optical sensors that are connected to three ADC inputs on AVR to generate instrument, note, and velocity MIDI bytes
• Use the internal AVR counter to synchronize when sending back MIDI messages to PC
• Sets 1 bit into register, your code will be polling
• Speed-dial hex switch on board
• Use GPIO connected switch
• To program channel select (percussion, instrument)
• Note that you will see 2 byte message for program channel selection and the typical 3 bytes for the message that contains note and velocity
ADC
TransmitTo PC
Input
Input
Hex Switch
Instrument Switch
AT
Meg
a32
ASM Program Block Diagram
Analog Signal (Photocells)
Timer1
USART
ADC Converter
ECE353: 20 Computer Systems Lab 1 Kundu
Build Process
Board Assembly C & Assembly Programming
• AVR Studio (IDE)• Olimex JTAG Programmer
Testing• MIDI-OX• GoLogic Logic Analyzer• Oscilloscope
ECE353: 21 Computer Systems Lab 1 Kundu
Board Assembly Reuse parts of Lab B
• MIDI input (Opto-isolator)
Plan for both programs if you decide to do both C and ASM versions
• Layout should be compatible with both
Use resistors as indicated in schematic
• Otherwise photo-senors may not work correctly
ECE353: 22 Computer Systems Lab 1 Kundu
AVR Studio
Atmel IDE Tool chains for building C and assembly code Programmer Debug
Easier to use than Quartus!
ECE353: 23 Computer Systems Lab 1 Kundu
AVR Studio Demonstration
• Open up a new instance of AVR Studio 4• When the welcome screen pops up, click New Project
ECE353: 24 Computer Systems Lab 1 Kundu
AVR Studio Demonstration
• Select AVR GCC for the project type• Type in project title and choose project directory if necessary• Click next and choose the debugging platform used to program
the MCU as well as the MCU that you are using
• Now go to Project --> Configurations and choose the MCUs clock frequency.
ECE353: 25 Computer Systems Lab 1 Kundu
AVR Studio Demonstration
• Start Coding!• When finished, 1.build your project and then 2.connect to the
MCU.
ECE353: 26 Computer Systems Lab 1 Kundu
AVR Studio Demonstration
• Once you connect to your MCU, erase the device and then load up the .hex file created in your project directory on to the Flash Memory.
ECE353: 27 Computer Systems Lab 1 Kundu
AVR Studio Demonstration
• Click on program to load your .hex file on to the board.• Now open up MIDI OX and set it up like you did in Lab B.• Start sending notes to your board!
ECE353: 28 Computer Systems Lab 1 Kundu
Testing
Familiar tools• MIDI-OX• GoLogic Logic Analyzer
• Analyzer individual MIDI frames• Oscilloscope
• Demonstrate frequency of sent MIDI messages
ECE353: 29 Computer Systems Lab 1 Kundu
General Advice
Consult the Atmega32 datasheet• Pin layouts• Code examples in C and assembly• All the info you need to manipulate the microcontroller
for this project is here!
Use the AVR studio debugger• Check the value of pins and registers• Single step through code to find source of problems
Use internet resources• avrfreaks.net is a good resource for examples
ECE353: 30 Computer Systems Lab 1 Kundu
DEMO
ECE353: 31 Computer Systems Lab 1 Kundu
Backup
ECE353: 32 Computer Systems Lab 1 Kundu
AVR AssemblyCommands similar to MIPS
ldi, breq, andi, lsr, rsr, etc.‘in’/’out’ used when working with I/O portsCan ‘rjmp’ using tags (no offsets to worry about)
There are some differences though…sbic, neg, cbi, etc.
ECE353: 33 Computer Systems Lab 1 Kundu
Setup Example (AVR)
Setup Example.include "m32def.inc“ (Include system file).def Temp=R16 (Define R16 register)
.org 0x0000 (Where to begin) rjmp RESET (Jump to RESET)RESET:…
ECE353: 34 Computer Systems Lab 1 Kundu
Stack PointerYou must initialize the stack pointer if you wish to
return from jumps…Set stack pointer
ldi Temp, 0x65
out SPL, Temp
ECE353: 35 Computer Systems Lab 1 Kundu
Setup Example (C)
Setup Example#include <avr/io.h> (Include system file)int main() {
int data;DDRA = 0xFF; (PORTA output)DDRB = 0x00; (PORTB input)PORTA = 0x55; (Output 0x55 or
0b01010101)data = PINB; (Store input values)
}…
ECE353: 36 Computer Systems Lab 1 Kundu
Timer1Timer1 is the 16-bit counter on the AVR
Will count overflows of Timer1 in order to gauge transmission time.
Good to set counter prescalar to 1024Choose 1024 prescalar for Timer1
ldi Temp, 0x05out TCCR1B, Temp
ECE353: 37 Computer Systems Lab 1 Kundu
USARTMust initialize with desired baud rate and frame
formatMust be initialized in both C and ASM
MIDI Baud rate : 31.25 kbpsWant start/stop bits and 8 data bitsRead data sheet