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.