You may choose either the following project or suggest a project of your own. If you come up with a project yourself, the project must be approved by the instructor and the TA. Until 21/11/96 you should come to a decision and choose your team and project. If you have any problems with the project subjects, feel free to ask the TA, Ferit FINDIK (Room 427, findik@bilkent.edu.tr). For those who will implement the "Digital Circuit Simulator", a special session will be held on 14/11/96. In this session implementation issues will be discussed in detail.
In this project you are going to implement a simple digital circuit simulator. In this simulator, the user should be able to construct a circuit out of simple primitive building blocks such as AND, OR gates, and simulate the circuit. You need to implement a GUI (graphical user interface) that will enable the user to contruct and simulate the circuit.
The simulator will consist of primitive building blocks such as AND, OR, NOT, D-FLIP-FLOP, LED, 0-INPUT, 1-INPUT, CLOCK-GENERATOR, and SPLITTER. All of these primitives will be objects in your program and they all have their own properties. The D-FLIP-FLOP has inputs D, clock , and one output Q (neglect not Q). The LED is an output device showing 0 or 1. This primitive will be used to show the output. The LED will be on when the output is 1 and it will be off when the output is 0. The 0-INPUT is a fixed input which always gives 0 to its output port, and the 1-INPUT always gives 1 to its output port. The CLOCK-GENERATOR generates a clock pulse at each time unit. The SPLITTER is an element that you do not see in normal circuits, but it is needed in this application. If a line is connected to two circuit elements after splitting into two lines, you have to put a splitter at the position of splitting. The splitter just takes an input and sends that input to two of its outputs.
The GUI should provide functions that will help users construct, edit, and run the circuit. The basic operations that you have to implement are inserting a new circuit element, changing the position of a circuit element, connecting the ports of two circuit elements, deleting a circuit element, deleting a connection between two primitives, changing a property of a circuit element (this applies only to the CLOCK-GENERATOR: you may change the frequency of the clock signal). Also you should be able to save and load circuits designed.
Note that each circuit element has a number of ports, either an input port or an output port. These ports may either be connected to another circuit element or be empty. Also each circuit element has a state (either 0 or 1). For example a 1-INPUT has a constant state 1, and an AND gate state is computed from the inputs of that gate. Each circuit element has a position and a bitmap that represents the element. Each circuit element except the LED has a fixed image that will be displayed on the screen. A LED's appearence on the screen should change according to its state.
Once you are done, implement a 4-bit adder and a 4-bit counter, and save them.
3-4 people may work as a team. Team members are expected to work together on designing and implementing the project.
The programs must be written in the Java language. You may work either on Solaris running Sun Sparc workstations, or on Windows NT or Windows 95 running PCs. Here is a list of available Solaris running Sun Sparc workstations in the undergraduate domain at Bilkent Computer Center: karanfil, menekse, papatya, hercai, istanbul, afyon, trabzon, safran, giresun.
Each team must prepare a WEB page. This page must include a description of the basic principles of the design, a description of how the system works, a discussion of the results, a description of how to use the program, an applet of the program, and a link to the source code of the program. You should submit the URL of this page via e-mail to tugrul@cs.bilkent.edu.tr.
An example project (courtesy of T. Aydin, A. Battal, O. Ozturk, S. Unal)