Page 1 of 6
ECE 243S – 2016
Project Structure
The project is an opportunity to have fun and to express your creativity by applying what you have learned
in this course. You remain working in the same group of two and with the same TA. The project portion
of the course is worth 10% of the course grade.
There are multiple project lab sessions, in which you will be working under a supervision of your TA.
However, there will be quite a bit of work that you will have to do outside the lab session, such as writing
your project proposal and debugging your code. You will demonstrate your result during the third project
lab session.
Be as creative as you would like with your project, and have fun with it! You only need to make sure you
keep it relevant to the course material and unique.
Marking
The marking scheme for the project is shown in the table with more details about each component further
below. Although the project is a group effort, the individual contribution of each student will be taken
into account when marking.
Idea 1 mark Coming up with a unique project idea.
Proposal 1 mark Completing the project proposal and getting your TA’s approval.
Progress Report 2 marks You will email your code and a log of your project’s progress to your TA.
Difficulty 6 marks How challenging your project is (determined subjectively by TA).
Functionality 10 marks Your success in completing the project core.
Idea
The first step in your project is to come up with a unique/original idea. Use this opportunity to be as
creative as you can, but of course, stay relevant to the course. You should be writing assembly, interacting
with peripherals, handling interrupts, interfacing C/assembly, etc. Spending a lot of time on mechanical
structures or electrical circuits does not give you any additional credit from a course point of view, and
hence is mostly discouraged if time is an issue. Some of the project themes are listed at the end of this
document.
Your project should be unique, that is, different than everyone else’s in the class. Although we strongly
encourage you to try to come up with a truly original project, similar ideas are OK, as long as there are
some distinctive features/approaches that make your project stand out. For example, one can use a Lego-
made car in many ways: to follow a line, to sense walls; the car can be controlled using the keyboard,
pushbuttons, switches, etc. Project uniqueness will be determined on a first-come-first-served basis.
Please strictly adhere to the guidelines below to make this process manageable.
There will be a note on Piazza regarding project proposals. Starting Mar 10 at 8:00am [too
early=>rejected], you are to make a non-anonymous follow-up discussion on that post that includes:
Page 2 of 6
Identification. This should include your lab day and station number.
Content should be a very short but yet informative-enough description of your project. “Car” or
“Video game” are not good titles. “Keyboard-controlled car with obstacle detection and
backtracking” or “VGA Tic-Tac-Toe with hexkeypad” are good summary lines.
Before posting, make sure that your project idea has not been claimed by searching the posts. You can
post only one project idea. After posting, monitor your post: TAs will check your idea and comment on
your post with one of the following messages:
project_accepted – Your project idea has been accepted!,
project_already_taken – Your project idea has already been claimed by someone else. In this
case, you are to post another follow-up with a new project idea.
project_not_enough_info – You must provide more details in order to allow differentiation of
other, similar projects.
You are to post a unique idea by March 13 at 5:00 pm. You are expected to have made progress on the
project by the first lab project session on the week of March 14, so doing this early is to your advantage.
Proposal
After ensuring that your project idea is unique, you are to fill the Project Proposal Form (can be found on
Blackboard) Submit it to Blackboard at least 2 days before your first project lab session and give it to
your TA at the beginning of the first project lab session.
Your TA will help you to determine the scope/effort required for the project during the first project lab
session. The TA will advise you on what to add/remove from your project proposal so it is sufficiently, but
not overly challenging. After you implement the changes, the TA will then approve and sign your project
proposal. You will then make two copies of the final filled form: one will be held onto by the TA, and the
other one will be for your reference. Your ability to successfully implement all that was approved in your
proposal will determine your project functionality and difficulty marks.
Progress Report
Before coming to the labs during the first, second and third lab sessions, you will need to email two
things to your TA:
a copy of your code excluding large data files, and
a running changelog file that documents the progress made by each partner. The changelog
should act as a sort of journal that chronicles the development of your project and must be
consistent with the code submitted. A sample changelog file snippet is shown below; you should
follow this format and list which partner contributed.
Page 3 of 6
Sample changelog for Henry and Julie:
Mar 22, 2012
– Henry: Fixed bug with button 1 not triggering interrupt
– Julie: Implemented line drawing on the VGA
Mar 21, 2012
– Julie: Got timer to work in a simple test program, will integrate later
– Henry: Connected button interrupts to lego arm movement
– Julie: Wrote function to draw individual pixels on VGA
In total, you will submit 3 changelogs, one for each of the project labs. The TA will use this documentation,
as well as his/her observations of your time spent in the lab to grade you on the consistency of your time
spent and the workload balance between partners.
Difficulty
The difficulty of your project will be determined relative to a predefined minimum difficulty (see project
core below) and the difficulty of other projects by your peers. The minimum difficulty will be determined
by your TA. You can increase the difficulty by adding features and enhancing functionality.
It is important to note that difficulty is rewarded only when it is
a) Achieved and demonstrated not just proposed, and
b) Relevant to the course material.
Building a fancy electronic circuit and having the Nios II turn it on is not a difficult project in the eyes of
your TA. Your project should be mostly written in assembly and should communicate with many devices,
preferably using interrupts, and have them all work together in some meaningful way.
Project Core
As a general guideline, a project core should consist of:
Two new devices (ones than you haven’t used in the labs) of moderate complexity,
o Can include the Lego controller in state mode.
At least one meaningful interrupt
Make use of subroutines
You may propose a project core that does not fit this template if you feel it is of equivalent difficulty.
Discuss this with your TA.
Some common project cores are:
VGA game: VGA pixel buffer + PS/2 keyboard using interrupts
Lego device: Lego controller in state mode using interrupts, controlled by PS/2 keyboard
Adding Complexity
Once you get your project core working, you can increase the complexity of your project by:
Page 4 of 6
adding more devices
using multiple interrupts, using nested interrupts (if it makes sense to do so)
using more complex algorithms
adding new modes of operation
You can mix C and assembly but the complexity of your algorithm will be judged primarily on your
assembly code.
Some examples of additional features to add:
audio notifications or background music
VGA heads up display
For VGA games: complex shapes, animations
Multiplayer or AI mode
The list below is not meant to be a quantitative measurement of difficulty; rather, it helps you understand
roughly how some devices stack up against others.
Device Difficulty
Seven Segment Display 1
Push Buttons 1
JTAG UART 2
Timer 2
Lego 2 (value) – 3 (state)
VGA 2 (character buffer) – 5 (complex shapes, animation)
Digital Protoboard (GPIO) 3
Hex keypad (GPIO) 3 (rows or columns) – 4 (rows and columns)
Audio 3-4 (different waveforms, prerecorded samples)
PS/2 2-3 (number of keys, press and release) – 4 (PS/2 Mouse)
Video input 3
ADC 4
Custom Instruction 5
IrDA UART 3
Custom Bus Component 5
SD Card 5
Ethernet 5
Certain devices can have a varying difficulty depending on how you use them. For example, the lego
controller is more difficult with multiple motors and sensors. PS/2 complexity increases when you use
support multiple key presses and holding keys.
The difficulty mark (out of 6) is determined by your TA. If you achieve the project core agreed on with
your TA you will get 3 marks. Additional marks are awarded when you go beyond your project core. These
additional marks are determined relative to the other projects in the class. Typically around 10-15% of the
projects will earn 6 marks for difficulty.
Page 5 of 6
Functionality
Your functionality grade will be determined by how successful you were at implementing the core of your
project. How you are penalized when your project core is not fully functional will depend on:
the severity of the bug;
the contribution of that component to the overall function of your project; and
the contribution of that component to your project’s difficulty.
To get credit for part of your project working you need to be able to demonstrate it to your TA during the
final lab. Therefore it is important to create unit tests for each component in your project, so if you are
unable to integrate your code and get the components to work together, you can still show that different
components work in isolation.
You can also substitute some components of your project with simpler ones in order to get the project
working. E.g. substituting the PS/2 Keyboard with JTAG UART for input. This will decrease the difficulty
but may still be worth full functionality marks.
You will not receive your project mark during the lab because the TAs will meet at a later date to discuss
all the projects and come up with a consistent marking scheme.
Example Project Themes
Microsoft Paint w/ Mouse
Dance Dance Revolution type game
BlackJack
Space Invaders
Tetris
Light tracking Lego car
Lego scanner/detector
Audio visualization
Oscilloscope on VGA
Duckhunt w/ Lego light sensor
Asteroids
Wireless DE1-DE1 communication w/ laser & light sensor
Voice recognition
Digital Musical Instrument
One good way to come up with your own idea is to look at the DESL->Nios II->Devices webpage, and try
to think of something neat you can do with some combination of those peripherals.
Page 6 of 6
Golden Project Rules
1. Design incrementally. Get the bones working as early as possible and then keep adding new
features and new peripherals to it. For example, if the project intends to control a figure on the
screen with a PS/2 keyboard, build the game so that you can control the figure with the DE1
switches while your partner figures out how to use the PS/2 controller, and then merge the two.
2. Have a backup plan. If the project’s success is heavily dependent on a single but rather
complicated task, be sure you are prepared for the possibility of that task failing. In the above
example, make sure you are prepared to fall back on the switches if you don’t get the keyboard
working.
3. Demonstrate something. The worst thing you can do is have nothing to demonstrate. No matter
what it is, get SOME PIECE of your project working on demo day.
Notice how 2 and 3 come naturally if you follow Rule 1, so please DESIGN INCREMENTALLY!
Other words to the wise:
1. Keep backups or use version control software
2. Comment and organize code (You will suffer from spaghetti code with unclear function)
3. Spend time building test facilities so you can easily debug modules.
4. Allow time for last-minute problems.
Schedule Summary (Please see details in instructions above)
Date / Time Deliverable
March 10, 8am – March 13, 5pm Unique project idea posted on Piazza
2 days before first project lab session Submit Project Proposal form on Blackboard
Before first project lab session Email TA code and changelog (see instructions)
First project lab session
(week of March 14)
Give TA copy of posted Project Proposal form. Make
two copies after approval; give one to TA
Before second project lab session
(week of March 28)
Email TA code and changelog (see instructions)
Before third project lab session
(week of April 4)
Email TA code and changelog (see instructions)
Note: In the lab between the first and the second project lab sessions there is another general lab.