EE319K Introduction to Embedded Systems
Email all professors and TAs (f13_ee319k@utlists.utexas.edu)
Course Catalog Description
Embedded systems; machine language execution; assembly and C language programming; local variables and subroutines; input/output synchronization; analog to digital conversion and digital to analog conversion; debugging; and interrupts.
Overview
EE319K will continue the bottom-up educational approach, started in EE302 and EE306. The overall educational objective is to allow students to discover how the computer interacts with its environment. It will provide hands-on experiences of how an embedded system could be used to solve EE problems. The focus will be understanding and analysis rather than design. The analog to digital converter (ADC) and digital to analog converter (DAC) are the chosen mechanism to bridge the CE and EE worlds. EE concepts include Ohms Law, LED voltage/current, resistance measurement, and stepper motor control. CE concepts include I/O device drivers, debugging, stacks, FIFO queues, local variables and interrupts. The hardware construction is performed on a breadboard and debugged using a multimeter (students learn to measure voltage and resistance). Software is developed in ARM Cortex-M assembly and C; most labs will be first simulated then run on the real LM4F123/TM4C123 board. Software debugging occurs during the simulation stage. Verification occurs in both stages. Labs 1, 2, 3, 4, 5 are written in ARM assembly language. Labs 8 and 9 are written in a combination of assembly and C. Labs 6 and 10 are written in C.
Yerraballi/Valvano class: ENS127, Monday, Wednesday, 12:
Yerraballi/Valvano class: ACA1.104, Tuesday, Thursday, 3:3
Gerstlauer Class: ENS115, Monday, Wednesday,
EE319K is team-taught. All three lecture sections will share the same TAs, PowerPoint slides, homework assignments, lab assignments, Exam 1, Exam 2, and Final Exam. EE319K will give common Exams 1 and 2 in the evening . The lectures for the two Yerraballi sections will be shared between Yerraballi and Valvano, alternating on a weekly basis.
MW12-1:30
16570 T 1:00 to 2:00pm
16575 Th 1:00 to 2:00pm
16580 T 2:00 to 3:00pm
16585 Th 2:00 to 3:00pm
MW1:30-3:00
16600 Th 12:00 to 1:00pm
16602 W 4:00 to 5:00pm
16603 W 5:00 to 6:00pm
16605 Th 3:00 to 4:00pm
TTh3:30-5:00
16610 W 9:00 to 10:00am
16615 W 10:00 to 11:00am
16620 W 11:00am to 12:00noon
16625 W 12:00noon to 1:00pm
Instructors:
Ramesh
Yerraballi, ENS106, (512) 471-2080, ramesh@mail.utexas.edu, http://www.ece.utexas.edu/~ryerraballi
Jonathan
W. Valvano, ENS627, (512) 471-5141
Andreas Gerstlauer, ACE 6.118, (512) 232-8294 gerstl@ece.utexas.edu, http://www.ece.utexas.edu/~gerstl/
Office Hours (subject to change):
Ramesh Yerraballi, MW: 2:00-4:30pm, Friday 10:30-Noon
Jonathan W. Valvano, Tuesday 12:30-1:30, Thursday 12-1, Friday 1-2, by appointment
Andreas Gerstlauer,
T 1:30-3pm, W 3-4:30pm, or after class/by appointment
1) No lab lecture Friday 9/13, Monday 9/16, Friday 11/29,or Monday 12/2.
2) Friday 10/25 and Friday 11/8, lectures will be 4-5p instead of 3-4p.
3) Exam 1 review on Monday 9/30 7:30-9p in ACA1.104 and
Tuesday 10/1 7-9p in ACA1.104
TAs (Photos of TAs): TAs will hold office hours in the
ENS507
lab. The office hours will be posted in lab. About 32
students will
be assigned to each 20-hour TA, and 16 students to each 10-hour TA.
Saugata
Bhattacharyya, saugata .at. utexas.edu
Chinmaya Dattathri,
d.chinmaya .at. utexas.edu
Prachi Gupta, Prachi.gupta
.at. utexas.edu
Emily Ledbetter, emily.k.ledbetter
.at. gmail.com
Wooseok Lee, wooseok.lee
.at. utexas.edu
Katherine Olin, katherineolin
.at.
gmail.com
Sourabh Shirhatti, shirhatti .at. utexas.edu
Mailing list: f13_ee319k@utlists.utexas.edu (all Professors and TAs)
EE319K Class Web page (Lecture notes, homeworks
and lab assignments): http://www.ece.utexas.edu/~valvano/Volume1
Data sheets: http://www.ece.utexas.edu/~valvano/Datasheets
Starter files: http://www.ece.utexas.edu/~valvano/arm/
Look for examples that have 4F120 in the name.
Text: Embedded
Systems: Introduction to ARM Cortex-M Microcontrollers, Fourth Edition. The fourth edition
has a lot
more information on the LM4F120/TM4C123 compared to the third edition.
However,
you are allowed to buy/borrow a used third edition, all editions have
the same
ISBN: 978-1477508992. This means if you buy it used you are likely to
get an
older edition. Available from Amazon (not available in
local
bookstores):
http://www.amazon.com/Embedded-Systems-Introduction-Arm®-Cortex/dp/1477508996
http://users.ece.utexas.edu/~valvano/arm/outline1.htm
Reference materials:
Equipment to buy:
· EK-TM4C123GXL (newer and more costly, but harder to get) http://www.ti.com/tool/ek-tm4c123gxl
· EK-LM4F120XL (the lowest cost and easier to get, but available only in August) http://www.ti.com/tool/EK-LM4F120XL
· EKK-LM3S1968 (buy used from a previous EE319K or EE445L student)
The Stellaris LaunchPad can also be purchased at regular vendors like
· http://www.digikey.com (EK-TM4C123GXL is part number 296-35760-ND, EK‑LM4F120XL is part number 296-34897-ND)
· http://www.mouser.com (595-EK-TM4C123GXL or 595-EK-LM4F120XL)
We will allow our students to use either kit, the same code runs on both (the TM4C123 has hardware PWM and USB host). Another possibility is to buy or borrow a EKK-LM3S1968 kit from a previous EE319K/EE445L student. If you obtain a kit from a previous student, you will need the EKK-LM3S1968, and a miniB USB cable. If you do buy or borrow a board from another student, I recommend you let the TA test it to make sure the board is functional. Caveat about the LM3S1968: The TAs will understand the details of the LM3S1968 because we used it the last two semesters, but your lab manual and lectures will focus on the TM4F123/LM4F120. So to use the LM3S1968, some modifications to the lab manual will need to be negotiated with your TA. The biggest difference will be the game in Lab 10. The LM3S1968 has a little 4-bit grey scale display that you will own as part of your board, and the TM4F123/LM4F120 will use a bigger 16-bit color display that you will borrow and return.
· Newark 56T0250 $8.99
· Mouser 589-TW-E40-1020 $7.11
· Allied Electronics 70012446 $7.79
· Digi-Key 438-1045-ND $8.98
There should be four power strips and at least 400 points, so little boards are also ok:
· Newark Twin Industries TW-E40-510 56T0249 $7.19
· Mouser Twin Industries TW-E40-510 589-TW-E40-510 $7.18
You can wait to buy the breadboard until classes start, because it will be cheaper to get together with other students to save shipping costs. PLEASE DO NOT BORROW OR BUY A USED BREADBOARD. Used breadboards can develop weird and confusing faults (pins not connected or multiple pins inadvertently shorted) and could cost you hours and hours of frustration. We recommend you wait until classes start to buy the breadboard, this way 3 or 4 students can team up and make one combined order and save on shipping. (On the other hand, we do recommend you get the microcontroller board as soon as possible).
Safety
warning:
Course Outcomes
After the successful conclusion of EE319K students should be able to understand the basic components of a computer, write assembly and C language programs that perform I/O functions and implement simple data structures, manipulate numbers in multiple formats, and understand how software uses global memory to store permanent information and the stack to store temporary information.
Detailed Objectives of EE319K
Prerequisites: EE306 or BME303 with a
grade of at
least C-. You should recall:
i. Address Space and Addressability
i. Memory operations
ii. Arithmetic and Logic operations
iii. Control operations – Branches/Jumps
Teaching
Philosophy
The EE319K staff strongly encourage students to take an active role in this class. Questions are welcome before, during and after class. Please feel free to email, visit or call us if you have questions.
Grading
10% |
Homework/Programming Assignments |
Weekly, turned in during class |
30% |
Laboratory Assignments |
Due at lab times (Tue/Wed/Thu) |
15% |
Exam 1 (WEL 2.304, 2.308) |
Thursday, October 3, 7:00-8:30pm |
20% |
Exam 2 (WEL 2.304, 2.308) |
Thursday, November 7, 7:00-9:00pm |
25% |
Final Exam (JGB 2.324) |
December 11, 7-10 |
There will be no re-tests, make-ups, or
incompletes.
Cutoff scores for the letter grades will not be determined until after the final exam.
Attendance:
Students are expected to attend lectures. The book covers more
information
than the class, and we will use lectures to map our way through the
book. If
you miss class you may find it difficult to catch up.
Laboratory Policies and Lab Partners: See
the first
few pages of the Lab
manual.
Exams: All students in EE319K will take Exam 1, Exam 2 and the Final Exam at the same time and place. Exam 1 is a regular written test, but outside of the normal class time and room. Exam 2 is a practical programming exam during which you will design, implement, and debug a software system in assembly. Your exact room will be assigned to you by your professor. Each student will need a laptop that can run for 100 minutes on battery power. You will need wireless internet connection for the first and last 10 minutes of the exam. You will be writing software using Keil uVision in simulation mode. No microcontroller hardware will be needed. During the exam you will not have access to the book, to the internet, to any starter code, or to any of your previously downloaded or written software. You will have access to the two page instruction sheet handout (like Exam 1), and the help system in Keil uVision. Please contact your professor by October 10 for any of the following four reasons: a) you do not own a laptop that can run simulation of uVision; b) your laptop runs but will need AC power because of a weak battery; c) your laptop runs but does not have wireless connection; d) you have a schedule conflict that prevents you from taking the test at the given time.
Tentative Lecture Schedule
The following schedule is preliminary; please check the web for the most recent version.
Week |
Lecture |
Lab |
|
Lecture Schedule |
1 (8/26) |
- |
Ch.
1, Ch. 2 |
Introduction
–
Course administration; Embedded systems, development cycle; Flow
charts, data flow and call graphs; Electronics, logic, Ohm’s law;
ARM
programming and Keil uVision
tools. |
|
2 (9/2) no class 9/2 |
- |
Ch. 3 (3.1-3.3), (Patt Ch. 11, 12) |
Architecture – ARM
architecture and execution; Simple addressing modes; Introduction to C
programming; Structure of a C program. I/O – Parallel ports,
direction registers; Logical and shift operations; C variables, assignments and
Boolean expressions. |
|
3 (9/9) |
Lab 1 Lock |
Sec. 4.6, 5.8, Sec. 4.2.2 (Patt Ch. 15) |
Debugging – Debugging
techniques, monitors, breakpoints, single stepping; Debugging using Keil uVision. Board – Demo of the
board (in class); Switch input and LED output |
|
4 (9/16) |
Board Demo |
Ch. 5 (5.1-5.3), Sec. 3.3.6, 3.3.8 (Patt Ch. 13, 14) |
Modular programming –
Abstraction and refinement; Subroutines, parameters,
stack; C functions. Arithmetic – Arithmetic
operations; Overflow, condition code bits; Control structures, branches,
if-then, loops. |
|
5 (9/23) |
Lab 2 Toggle |
Ch. 6 (6.1-6.3), Sec. 6.9 (Patt
Ch. 16) |
Pointers – Indexed
addressing; Arrays; Strings; C pointers, arrays, indexing,
strings. Advanced functional debugging
– Debugging dump. |
|
6 (9/30) |
Lab 3 Board |
Sec. 4.4 Ch. 1-5 |
Timers – SysTick Timers; Review for Test 1. Test 1 (closed book),
Thursday, 10/3, 7-8:30pm, room TBA |
|
7 (10/7) |
Lab 4 Debug |
Sec. 6.4, 6.5, Sec. 9.1 (Patt Ch. 19) |
FSMs – Finite state
machines (FSMs); Linked structures; C structures and data types;
FSMs in C. I/O synchronization –
Blind cycle, busy wait, interrupts; Phase locked loop (PLL). |
|
8 (10/14) |
Lab 5 FSM |
Ch. 9 (9.1-9.4), Sec. 9.6, Sec. 10.1-10.3 |
Interrupts – ARM
interrupts and interrupt processing; Interrupt controller; Thread synchronization;
Periodic interrupts; C/assembly interface; D/A conversion –
Digital to analog conversion (DAC); Resistor networks; Sound and music generation. |
|
9 (10/21) |
Lab 6 DAC |
Ch. 7 (7.1-7.8) (Patt Ch. 17) |
Variables, parameters –
Locals; Scope (local/global); Stack frames, recursion; Parameter passing,
call-by-value, call-by-reference. LCD interface – LCD
programming; Fixed-point numbers, number
conversions. |
|
10 (10/28) |
Lab 7 LCD |
Sec. 10.4-10.6 Sec. 7.6 |
A/D conversion – Analog
to digital conversion (ADC); Nyquist
theorem; Lab 8 design methods. Numerical calculations
– Multiplication and division; |
|
11 (11/4) |
- Exam 2 |
Ch. 1-7 |
Review for Test 2. Test 2 (closed book),
Thursday 11/7, 7-9pm, in lab (room TBA). |
|
12 (11/11) |
Lab 8 ADC |
Ch. 8 (8.1, 8.2), Ch. 11 (11.1‑11.4)
(Patt Ch. 19, skip Sec. 19.4) |
Serial I/O – Universal
asynchronous receiver transmitter (UART); UART programming and
interrupts; Lab 9 introduction Thread communication –
Producer-consumer problems; FIFO queues; FIFOs and queues in C. |
|
13 (11/18) |
Lab 9 UART |
Sec. 6.7, 9.7 |
Game programming – 2-D
arrays, bitmaps, sprites; Lab 10. |
|
14 (11/25) |
- |
|
Floating Point; Advanced
Embedded System Design. Thanksgiving holiday,
no class Thursday 11/28 |
|
15 (12/2) |
Lab 10 Game |
Ch. 1-11 |
Review for Final Exam. Game Competition, Friday,
12/6, 12-1pm, room TBA |
Lab Schedule
Labs are due during your lab time (Tue/Wed/Thu), and are demonstrated to the TA.
There will be a signup for Lab checkout
times. Each
student will have a specific checkout time which will be when their lab
will be
demonstrated to their TA.
You can only switch lab sections using official add/drop procedures.
Week |
Lab |
Task |
8/26 |
|
None, do not go to lab. |
9/2 |
|
Go to ENS 507 for demonstration, install Keil tools on your laptop before. |
9/9 |
Digital lock, I/O, parallel port, direction register and logic function, written in assembly (simulated, groups of two) |
|
9/16 |
|
Real board demonstration, bring your board to lab. |
9/23 |
For-loops, while-loops, if-then branching, subroutines, and time delays, written in assembly (simulated and board, groups of two) |
|
9/30 |
LED and switch interface, circuit measurements, schematics, written in assembly (board, groups of two) |
|
10/7 |
Debugging techniques, one switch, one LED, written in assembly (simulated and board, groups of two) |
|
10/14 |
Traffic Light Controller, FSMs, written in assembly (simulated and board, groups of two) |
|
10/21 |
Digital Piano using a 4-bit DAC, written in C (simulated and board, groups of two) |
|
10/28 |
LCD device driver, decimal fixed-point
output, local variables, written in assembly (simulated and board,
groups of two) |
|
11/4 |
Exam 2 |
Thursday, 11/7, 7-9pm, room to be announced (closed book) |
11/11 |
Real-time position monitor, ADC, interrupts, LCD, mixture of assembly and C (simulated and board, groups of two) |
|
11/18 |
Distributed DAS, serial port interrupts, FIFO queue, mixture of assembly and C (simulated and board, groups of two) |
|
11/25 |
|
Thanksgiving, no lab |
12/2 |
Game design competition, written in C (simulated and board, groups of two) |
Tentative Homework Schedule
The following schedule is preliminary; please check the web for the most recent version.
Homework is 1-2 pages printed and handed to the TA
at the
start of lecture of the week as specificed in the assignment.
Week |
Homework |
Topic |
8/26 |
- |
- |
9/2 |
|
|
9/9 |
|
|
9/16 |
|
|
9/23 |
|
|
9/30 |
|
|
10/14 |
|
|
10/21 |
|
|
10/28 |
Practice Exam 2 |
|
11/4 |
|
|
11/11 |
|
|
11/18 |
|
|
11/25 |
- |
|
12/2 |
- |
Pop quiz (course evaluations) |
Lab Computer Usage
Computers
in ENS507 are available for your usage. TAs in the laboratory are
checking off programs
and supervising while on duty, thus you can expect to have only brief
consultations with them. You should learn to develop software while on
the
computer. This course involves some projects that require extended
periods of
time to complete and a project cannot be done just overnight. Get
started on an
assignment early so you can get help if you need it. There are not
enough
machine hours to give everyone more than enough time to complete each
program.
We expect students to have a laptop or have access to a machine to run
at home.
Unfortunately, expect the laboratory to be crowded and machine time to
be
scarce if you attempt to work in the lab a day or two before an
assignment is
due. You will be competing with students in other courses for computer
time. We
need your assistance in the laboratory. Please report any equipment
problems to
the TA if they are present. If a TA is not present, use the form
provided in
the lab. If you do this, we can rapidly get repair service. Please help
to keep
the lab clean.
EE319K
kit handed out by TAs
1 7406, six open collector drivers used for the LED interfaces
6 LEDs (20 mA, 2 red, 2 yellow, and 2 green LEDs)
6 220 ohm 5%, 0.25 watt resistors
3 push-button switches
3 10k ohm 5%, 0.25 watt resistors
3 1.5k ohm 5%, 0.25 watt resistors
3 12k ohm 5%, 0.25 watt resistors
2 feet of 4-Wire 24 gauge solid wire, used to prototyping (you can get more wire, just ask your TA)
1 0.1 uF ceramic bypass cap, place across power and ground of the 7406
1 headphone jack, used in lab 6 to create audio
1 20k ohm slide pot, used in labs 8 and 9 to measure distance
Items to get from long term checkout
1 Kentec EB-LM4F120-L35 display (if you check out the LCD and do not return it and its bag by 12/6, we will reduce your overall grade in EE319K one letter grade). If you loose this display it will also cost you about $45 to buy us a new one.
Items to get from your TA
Serial
cable
for Lab 9, used to connect one LM4F123/TM4C123 board to another (this
cable is
simply 2 wires about 2 feet long).
1. Go to https://www.keil.com/demo/eval/arm.htm
2. Enter your contact information with valid address, phone and email:
Company = University of Texas, devices = TI, architecture = Cortex-M4
3. Click submit.
4. Right-click on mdk472_a.exe (actual file may be a newer version) and save it to your computer.
5. Run the exe to install.
1. Download the TM4C123/LM4F123 example files LaunchPadware.zip (unzip in an easy to find place)
2. Find the LM4F_stellaris_drivers folder within this set of examples
3. Plug the LaunchPad board in, and direct Windows to find drivers in this LM4F_stellaris_drivers folder
Legal Notes
The 12th class day is September 13. The drop policy is extremely complicated. See your academic advisor or the Dean of Students for more information. Course evaluation is conducted on the last class day in accordance with the Measurement and Evaluation Center form. The final exam is at the time and place stated in the course schedule. November 5 is the last day an undergraduate student may, with the Dean’s approval, withdraw from the University or drop a class except for urgent and substantiated, nonacademic reasons.
Students
with disabilities: The
Religious Holy Days: By UT Austin policy, you must notify the
instructor
of your pending absence at least fourteen days prior to the date of
observance
of a religious holy day. If you must miss a class, an examination, a
work
assignment, or a project in order to observe a religious holy day, we
will give
you an opportunity to complete the missed work within a reasonable time
after
the absence.
Electronic mail notification policy: In this course, e-mail will be used as a means of communication with students. You will be responsible for checking your e-mail regularly for class work and announcements. The complete text of the University electronic mail notification policy and instructions for updating your e-mail address are available at http://www.utexas.edu/its/policies/emailnotify.html.
Use of Blackboard and class web site: This course uses the class web page and Blackboard to distribute course materials, to communicate and collaborate online, to submit assignments and to post solutions and grades. You will be responsible for checking the class web page and the Blackboard course site regularly for class work and announcements. As with all computer systems, there are occasional scheduled downtimes as well as unanticipated disruptions. Notification of disruptions will be posted on the Blackboard login page. Scheduled downtimes are not an excuse for late work. However, if there is an unscheduled downtime for a significant period of time, we will make an adjustment if it occurs close to the due date.
Scholastic
Dishonesty
"Faculty in the ECE Department are committed to detecting and responding to all instances of scholastic dishonesty and will pursue cases of scholastic dishonesty in accordance with university policy. Scholastic dishonesty, in all its forms, is a blight on our entire academic community. All parties in our community -- faculty, staff, and students -- are responsible for creating an environment that educates outstanding engineers, and this goal entails excellence in technical skills, self-giving citizenry, an ethical integrity. Industry wants engineers who are competent and fully trustworthy, and both qualities must be developed day by day throughout an entire lifetime. Scholastic dishonesty includes, but is not limited to, cheating, plagiarism, collusion, falsifying academic records, or any act designed to give an unfair academic advantage to the student. The fact that you are in this class as an engineering student is testament to your abilities. Penalties for scholastic dishonesty are severe and can include, but are not limited to, a written reprimand, a zero on the assignment/exam, re-taking the exam in question, an F in the course, or expulsion from the University. Don't jeopardize your career by an act of scholastic dishonesty. Details about academic integrity and what constitutes scholastic dishonesty can be found at the website for the UT Dean of Students Office and the General Information Catalog, Section 11-802."
You are encouraged to study together and to discuss information and concepts with other students. You can give "consulting" help to or receive "consulting" help from such students in oral form. However, this permissible cooperation should never involve one student having possession of a copy of all or part of work done by someone else, in the form of an email, an email attachment file, a portable storage device, or a hard copy. Copying of any part of a program is cheating without explicit reference to its source. We do enter lab assignments turned in by EE319K students through a plagiarism checker, comparing them to assignments of this and previous semesters. If we find two programs that are copied, there will be a substantial penalty to both students, e.g., failure in the course. Students who cheat on tests or in lab will fail. Prosecution of cases is very traumatic to both the student and instructor. It is appropriate to use software out of the book, class website as long as all copy-pasted software is explicitly referenced. Copy-pasting software from current or past EE319K students is scholastic dishonesty. Policies concerning the use of other people's software in this class:
A practical guide to ethics involving software
development for EE319K labs
Activities you can and should do
Activities you cannot and should not do
University
Honor Code: "The core values of the
Abet material
Three lecture hours and one laboratory hour
a week for
one semester.
Design Assignments: Labs 5, 8, 9, 10 (1 week each)
Laboratory Projects: Labs 1, 2, 3, 4, 6, and 7
SCH Engineering Topics 3 (Including: 1 SCH of Engineering Design)
Relationship of the Course to ABET EC2000 Program Outcomes:
☒ |
ABET EC2000 Program Outcomes |
☒ |
a. An ability
to apply knowledge of mathematics, science, and engineering |
☒ |
b. An ability to design and conduct experiments, as well as to analyze and interpret data |
☒ |
c. an ability to design a system, component, or process to meet desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability |
|
d. An ability to function on multi-disciplinary teams |
☒ |
e. An ability to identify, formulate, and solve engineering problems |
|
f. An understanding of professional and ethical responsibility |
☒ |
g. An ability to communicate effectively |
|
h. The broad education necessary to understand the impact of engineering solutions in a global, economic, environmental, and societal context |
☒ |
i. A recognition of the need for, and an ability to engage in life-long learning |
☒ |
j. A knowledge of contemporary issues |
☒ |
k. An ability to use the techniques, skills, and modern engineering tools necessary for engineering practice |
ABET
Criterion 9: Program
Criteria for Electrical Engineering Curriculum Achieved:
|
ELECTRICAL ENGINEERING PROGRAM CRITERIA |
☒ |
Programs must demonstrate that graduates have a knowledge of: |
|
1. Probability and statistics, including applications appropriate to the program name and objectives; |
☒ |
2. Mathematics through differential and integral calculus, basic sciences, computer science, and engineering sciences necessary to analyze and design complex electrical and electronic devices, software, and systems containing hardware and software components, as appropriate to program objectives. |
☒ |
3. (Electrical) Advanced mathematics, typically including differential equations, linear algebra, complex variables, and discrete mathematics. |
|
|
Curious about Valvano's
research? See http://users.ece.utexas.edu/~valvano/research
Curious about Gerstlauer's research?
See http://www.ece.utexas.edu/~gerstl/research.html