Introduction

Computer architecture and organization is a key component of computer science and engineering. Consequently, courses in Computer Architecture and Organization hold high ranking in Computer Sciences or Computer Engineering curricula. This further entails the need to organize this type of courses in an adequate way.

Computer architecture and organization is one of key knowledge areas in Computer Engineering. Therefore, courses in this area have to achieve multiple objectives. The basic one is that they must provide an overview of computer architecture and organization concepts and give insight into the operation of a typical computer system. Further on, they should highlight all the important issues in computer architecture and organization that practicing engineers are faced with. It is also expected from the courses to reinforce topics that are common to other areas of computer science, such as programming languages, operating systems, data base systems, etc. In addition to that, they must bring closer to students various tools they need to be familiar with, in order to be able to carry out research and development, once they leave the school.

Consequently, most of courses in computer architecture and organization include the practical work in the laboratory. This makes it possible to students to verify their theorethical knowledge from lecture classes by observing and exploring characteristics and behaviors of actual systems. This also includes designing, implementing, testing, and documenting hardware and software, designing experiments to acquire data, ana-lyzing and interpreting that data, and in some cases using that data to correct or im-prove the design. Introductory laboratories are somewhat directed to reinforce con-cepts presented in lecture classes. Therefore, activities in the laboratory are mainly di-rected to demonstrate specific phenomena or behavior, and provide experiences with measuring and studying desired characteristics. However, intermediate and advanced laboratories include problems that are more open-ended. As the result, students are requested to design and implement solutions, to design experiments to acquire data needed to complete the design or measure various characteristics. All these activities in the laboratory are most effectively done using appropriate simulators of computer systems.

Ideally, simulators should support practical examples for a wide range of relevant topics. They should allow students first to write their own assembly and/or high-level language programs and then carry out simulation. The simulators should also include the graphic animation of the program execution at various levels of hierarchy. In addi-tion to that, simulators must be user-friendly with a minimal learning curve. Simulators should also enable an easy switching in the follow up engineering and/or scientific envi-ronment to highly sophisticated professional simulators. They should be configurable allowing instructors to adapt them to a number of various laboratory experiments and various curricula. These requirements are often contradictory, which makes the devel-opment of such a software tool relatively difficult. In such circumstances, a crucial prob-lem is the selection of an appropriate simulator.

The rest of the paper is organized as follows. Section 2 gives a survey of simula-tors suitable for teaching computer architecture and organization. Section 3 introduces the criteria for their evaluation that fall into two groups: the topics coverage and the simulation features. Section 4 presents the evaluation results of the simulators sur-veyed. Section 5 concludes the paper.