Project
Guideline
Introduction
First of all, welcome to the CSE351 course
projects!
There will be three course projects given
one after another throughout the semester. In these exciting projects, we will
gradually design and implement a prototype operating system, which supports (1)
HW interrupt handling, (2) multithreading and thread scheduling, and (3)
synchronization among the co-scheduled threads, with almost every core
component built from scratch by yourselves. The three projects will account
for 40% of your final grade.
The course projects are team-based. Each
team should consist of TWO or THREE members and have a team leader. A team
leader is responsible for the coordination of team members, management of
project progress and submission of the team's work. By the deadline of a
project, each team needs to hand in a project report and a zipped folder
containing their designs.
Figure 1 illustrates the interaction among
the three projects. In Project One (the red
block), the endless loop of your prototype OS periodically gets interrupted by Nios-II's timer, so you need to design a interrupt handler
to process the interrupt requests and then bring the execution back to the endless
loop. In Project Two (the green block), your
prototype OS needs to create multiple threads by taking advantage of the memory
space allocator (namely, malloc and free
functions that are already provided by the Nios-II
library), periodically schedule the threads by leveraging on the timer
interrupt handler, and finally terminate the finished ones. In Project Three (the blue block), a synchronization
mechanism should be incorporated into your prototype OS so that multiple
threads can work together on the critical section
correctly.
Figure 1 A Big
Picture of the Course Projects |
Tasks
Team
Formation
▪
Weight:
0%
▪
Due date: October 8th, 2012
▪
Goal:
to form teams each of which consists of 2 or 3 members and has a leader
Pre-project
Lab (Link)
▪
Weight:
0%
▪
Due date:
Part of Project 1
▪
Goal:
to get HW & SW design environments ready for your projects
Project I:
Timer Interrupt Handler (Link)
▪
Weight:
5%
▪
Due date:
10/19/2011
▪
Goal:
to make your OS interact with the underlying FPGA platform
Project
II: Multithreading & Thread Scheduling (Link)
▪
Weight:
20% (the most challenging project among the three!!!)
▪
Due date:
11/19/2012
▪
Goal:
to enable you OS to create, schedule and terminate multiple threads
Project
III: Thread Synchronization (Link)
▪
Weight:
15%
▪
Due date:
Final Week
▪
Goal:
to equip your OS with a synchronization mechanism for mutual exclusion among
co-scheduled threads
Grading Criteria
Following is
the grading criteria with a total of 100 points for any projects. But different
projects may carry different weights in your final grade.
1.
Project
report: 50%
2.
Correctness
of the program: 40%
3.
Detailed
source code comments and README: 10%
Typically,
all members in a team will get the same grade for a project, unless the team
leader or other members report to the lab leader that someone contributes
little to the project and he/she should get only a certain percentage (e.g.,
90%) of the teamÕs grade.
Submission
á
CSE351 Handin System: http://cse.unl.edu/~cse351/handin/
á
In your project report, it is not what the instructor or the
Lab TA ask for that drives you to write; rather, it is which shinning aspects
of your designs that motivate you to sell them.
Useful Documents
1.
Nios-II Software Developer's Handbook (Link)
2.
Instruction Set Reference for Nios-II
Soft CPUs (Link)
3.
Hardware Abstraction Layer API Reference (Link)
4.
Using Assembly in the C Source (Link)
5.
C & ASM in Nios-II (Link)
6.
Altera Document Center (Link)
7.
Altera Development Forum (Link)
Frequently Asked Questions
1.
Question:
how can a team do a splendid job in the course projects?
Answer: based on the experiences from past semesters,
several suggestions are provided for your success in accomplishing the
projects.
á Carry out efficient
teamwork among team members. The team leader should be really responsible for
the team coordination in addition to his/her assigned tasks. But the team
members cannot just rely on their leaders or other members. Every student
should have his/her own contributions and achievements.
á Plan well for your
team and make steady progress according to the milestones. In order to finish
it with high quality on time, you have to start early and keep going ahead.
á Always work in a
top-down fashion: have a big picture of the fundamental things first and then
dig into details.
á Document your work
well somewhere and utilize a version control system (e.g., SVN or Mercurial) to
maintain your private code repository.
á Deploy effective
and efficient debugging strategies: (1) always get started with simple cases.
(2) insert printf or alt_printf at appropriate places during debugging.
(3) use register/variable watchers to track run-time
values. (4) use checkpoints at appropriate places in
debugging. (5) dig into the disassembly code of your C
program.
NEVER be reluctant to discuss your
questions with the instructor or Lab TA. The Lab TA will periodically check
your understanding and progress of the projects. But without being told about
your questions or problems, the Lab TA would assume that your project work were
going well.