Steven D. Johnson's Home Page

NOTE: The projects described on this page are mostly obsolete. I have left them here to give a general idea about the kinds of projects I supervise, and will update the project descriptions soon. Meanwhile, I welcome inquiries about project ideas.

Active Projects

Home pages for active projects contain information about what the project is an who is participating. Follow the home-page links for more information or drop by to talk about them.

Individual Project Ideas (for Y391, C790, etc)

To begin with, I am always open to participating in research or exploratory projects in which I have relevant expertise and interest (not always identical). When considering a request to supervise a project, I consider three things: whether the objectives are well defined and realistic, educational benefit, and motivation on the part of the participant(s). Although it is, of course, desirable for the project idea to be original, most students who are interested in individualized projects come looking for something to do. Below is a list of suggestions and ideas, which I will build as I think of things.

Whether projects are taken from this list or originally conceived, I encourage students to prepare a 2-3 page "prospectus," early on, outlining the work they plan to do.

Except where indicated, the project ideas below are suitable for both undergraduates and graduates. Graduate projects involve more effort per hour of credit than do undergraduate projects. I recommend that graduate students at the Master's level consider doing six credit-hour project, culminating in a significant written report, a Master's Thesis. This kind writing experience is representative of what software professionals must do on the job.

The most successful projects I have supervised have involved a good deal of initiative on the part of the students who did them. They may encounter new programming languages, novel applications, and unusual environments. I expect the student to be able to learn new tools in a self-directed manner, but I also allow for this "learning curve" in my evaluations. I am looking for a level of effort of about 3-4 hours per week, on average, for each semester hour of credit. I require that the work be documented in a technical report, which typically has three parts:

  1. An overview of the project, explaining what it is, why it was undertaken, and its current status.
  2. An external technical description, such as a user manual or detailed installation-and-use guide.
  3. An internal technical description explaining the implementation in sufficient detail that another student can pick up the work.


Design Derivation and Behavior Tables


Design Derivation and Behavior Tables

My current main research project involves the implementation of a transformation system for specifying and refining system models and embedded software. The three main software components are: 1) a background editor, written in Scheme, which performs analysis, s-expression transformations, and design management; 2) a front-end user-interface, implemented in Emacs, TCL, Java to visualize interactive transformations; and 3) a metaprogramming environment for integrating other reasoning tools.

There are many software subtasks for students at all levels. Students in systems and compilers probably have the best background to participate. I am especially interested in applying this research to embedded software. There are also several case studies I would like to do, most of which have a significant hardware component.


Modeling with streams

Streams are a linear, nonterminating data structures, which are used in my research to represent behavior over time. Using a locally developed programming language called Daisy, we have explored modeling communicating hardware and software systems using streams.

One project would be to investigate using similar stream based modeling methods in Scheme, ML, and Haskell. Another would be to do a serious implementation of streams in Scheme, together with supporting functions to visualize these systems.


C335 CPU

In his version of C335, Frank Prosser developed a module on microprogramming, illustrated by the design of a very simple stack machine. I have translated this description to the Xilinx Foundation design system, which is used to configure Field Programmable Gate Array devices. With a bit more work, this design would produce a working hardware version of Prosser's illustration, and, in addition, a simulation model for animating its behavior in the classroom.

Undergraduates interested in this project should probably have some background in hardware. For graduate students, this might be an opportunity to learn some elementary hardware design.


FM9001 Computer Prototype

The FM9001 is a microprocessor developed in formal methods research as a case study in hardware verification. It remains, the most complete example of microprocessor verification to have been done. Because it originated in early verification research, an its main purpose was to serve as a referent for a formal proof, the FM9001 has an extremely orthogonal instruction set, which could be learned in a week or two by a beginning CS student. For this reason, I bacame interested in developing an instrumented computer, based on the FM9001, for possible use as an instruction laboratory in C335.

The entire project would involve building a prototype computer, connected to a modern development environment (as in the current C335 lab), together with software for program development, single-step instruction execution, and other instructional tools. A student independent project would be to contribute some piece to this larger system, starting with a "mother board" using the FM9001.


Servobot project

Servobot is a simple six-legged robot, which has been used locally for research experimentation in adaptive control. I am interested in developing it a vehicle to teach primary and secondary students about robotics and control.

A. Servobot GUI

Develop a graphical user interface in Tcl/Tk (or other tool set) to allow children to design walking gates and experiment with them on Servobot. This project involves the human-computer interaction aspects, including enhancements to the graphic display, improvements to the design environment, and experimentation with different age groups to develop teaching materials.

B. Servobot "driver"

Each of Servobot's six legs is driven by two servomotor actuators. A Tcl/Tk user interface, currently hosted on a relatively slow PC notebook computer. Although control of the robot is done with simple character stream I/O, Tcl interpreter is too slow do fine-grain control. This project would develop a C language (or Visual Basic or ...) program standing between the GUI and the I/O port that drives the robot. The software has real-time characteristics, but is not overly complex. The hard thing about this project will be to figure out how to set up communication with the GUI.


B441/P442 lab software

The hardware instructional lab currently uses Linux PCs to host software for the Logic Engine prototyping board. These PCs are scheduled to be replaced by PCs hosting Windows NT. There are two programs which need to be ported to the new hosts:

A. Fuse map editor

B441 students use a graphical editor to program logic-array hardware devices. The front end will be reimplemented in Java (or possibly prototyped in TCL). The back end is a simple file format which is fed to the device programmer. Ultimately, this intermediate file may be replaced by more direct link.

B. LEASM microassembler

The digital design lab has an assembly language for programming a microcode sequencer. This assembler has been compiled successfully on NT hosts, but could use refinement. Also, the downloading process needs to be reimplemented.


Instructional software

I am developing materials to teach courses in verification and formal methods. As part of this, I want over time to create a collection of software tools that will help students understand how reasoning tools operate. These programs must strick a delicate balance between clarity and performance. Some current and proposed project are listed below:

A. Binary decision diagrams in Scheme -- I

BDDs are a prevalent data structure in verification software. We have the beginnings of a system linking Scheme to an existing C library for building BDDs. I would like to see this integration carried forward and documented so that students could prototype higher level verification tools in Scheme.

B. Binary decision diagrams in Scheme -- II

A second project with binary decision diagrams involves implementing them directly in Scheme. The goal hear is to help students understand the structures and algorithms used to create this data representation. I am also interested in qualitative performance comparisons.


Language oriented architecture.

In the research laboratory, we have ongoing projects in architecture to support heap based programming systems. Specifically, we have a hardware prototype for direct execution of compiled Scheme, and are planning a similar project for Java. This project requires a background in hardware.


Embedded software

I am trying to build a program for design using embedded microprocessors, especially in applications to scientific instumentation and robotics. I would be willing to supervise a motivated, highly self-directing student in the exploration of this technology.


Fri May 11 16:15:36 EDT 2007 [SDJ]