6
Improvements on Teaching Methods and Contents for the “Computer Organization and Architecture” Curriculum Chunfeng Yuan*, Yihua Huang*, Zhesheng Zhang, Guihai Chen, Wanchun Dou Department of Computer Science and Technology, Nanjing University State Key Laboratory for Novel Software Technology, Nanjing University Nanjing, Jiangsu, 210093, China {cfyuan, yhuang, zszhang, gchen, douwc }@nju.edu.cn Abstract “Computer Organization and Architecture” is one of the most important fundamental courses for those majoring in computer science and engineering. The contents of the curriculum are crucial for entire computer discipline and computer systems. As a result, the curriculum plays an important role in training computer science students. This paper begins with the discussion on principles and goals of the curriculum. Then, it describes teaching philosophy and methods, improvements of contents, along with their effects, for lectures and experiments of the curriculum. Finally we review some experiences from the development and teaching of the curriculum. This paper intends to share experiences in teaching the curriculum with other institutes in China and provide them with a potentially useful instructional model. 1. Introduction “Computer Organization and Architecture” is one of the most important fundamental curricula for those majoring in computer science and engineering. Dr. David Patterson at UC Berkley gives a clear description of the hierarchical structure for a computer system using a diagram in his lecture notes on the course. The diagram illustrates the position of the course contents as depicted in Figure 1. A computer system consists of hardware and software. What lies on the intersection is the Instruction Set Architecture (ISA). The shadowed portion that surrounds ISA, as depicted in Figure 1, is the focal contents of the “Computer Organization and Architecture” curriculum. As we see from Figure 1, the core contents of the course consist of the Instruction Set Architecture and computer hardware system that includes the processor, memory, I/O, and the interconnection among these functional components. These hardware components are the resources directly managed by an operating system and the platform to run machine code programs generated by compilers. As a result, the curriculum is tightly related to the contents of the operating system, compiler and programming. Thus, we can see that the curriculum covers the core contents of computer systems, making it crucial in learning computer systems. It links to related units and bodies of knowledge between fundamental and advanced courses, playing an important role in establishing integrated knowledge framework for computer discipline. Students will acquire thorough understanding of the hierarchical structure of a computer system, establish comprehensive concepts of a computer system, understand and master the interface between hardware and software, develop their abilities and skills for analysis, design, and development of computer hardware and software systems. Fig 1. Computer system hierarchical layers Compiler Operating System (ex:Windows xp) Application (ex: browser) Digital Design Circuit Design Instruction Set Architecture Datapath & Control Transistors I/O system Processor Memory Hardware Software Assembler 2009 Eighth IEEE International Conference on Embedded Computing; IEEE International Conference on Scalable Computing and Communications 978-0-7695-3825-9/09 $26.00 © 2009 IEEE DOI 10.1109/EmbeddedCom-ScalCom.2009.110 560 2009 Eighth IEEE International Conference on Embedded Computing; IEEE International Conference on Scalable Computing and Communications 978-0-7695-3825-9/09 $26.00 © 2009 IEEE DOI 10.1109/EmbeddedCom-ScalCom.2009.110 560 International Conference on Scalable Computing and Communications; The Eighth International Conference on Embedded Computing 978-0-7695-3825-9/09 $26.00 © 2009 IEEE DOI 10.1109/EmbeddedCom-ScalCom.2009.110 560

[IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

  • Upload
    wanchun

  • View
    213

  • Download
    1

Embed Size (px)

Citation preview

Page 1: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

Improvements on Teaching Methods and Contents for the “Computer Organization and Architecture” Curriculum

Chunfeng Yuan*, Yihua Huang*, Zhesheng Zhang, Guihai Chen, Wanchun Dou Department of Computer Science and Technology, Nanjing University

State Key Laboratory for Novel Software Technology, Nanjing University Nanjing, Jiangsu, 210093, China

{cfyuan, yhuang, zszhang, gchen, douwc }@nju.edu.cn

Abstract

“Computer Organization and Architecture” is one

of the most important fundamental courses for those majoring in computer science and engineering. The contents of the curriculum are crucial for entire computer discipline and computer systems. As a result, the curriculum plays an important role in training computer science students. This paper begins with the discussion on principles and goals of the curriculum. Then, it describes teaching philosophy and methods, improvements of contents, along with their effects, for lectures and experiments of the curriculum. Finally we review some experiences from the development and teaching of the curriculum. This paper intends to share experiences in teaching the curriculum with other institutes in China and provide them with a potentially useful instructional model. 1. Introduction

“Computer Organization and Architecture” is one

of the most important fundamental curricula for those majoring in computer science and engineering. Dr. David Patterson at UC Berkley gives a clear description of the hierarchical structure for a computer system using a diagram in his lecture notes on the course. The diagram illustrates the position of the course contents as depicted in Figure 1.

A computer system consists of hardware and software. What lies on the intersection is the Instruction Set Architecture (ISA). The shadowed portion that surrounds ISA, as depicted in Figure 1, is the focal contents of the “Computer Organization and Architecture” curriculum. As we see from Figure 1, the core contents of the course consist of the Instruction Set Architecture and computer hardware system that

includes the processor, memory, I/O, and the interconnection among these functional components. These hardware components are the resources directly managed by an operating system and the platform to run machine code programs generated by compilers. As a result, the curriculum is tightly related to the contents of the operating system, compiler and programming.

Thus, we can see that the curriculum covers the core contents of computer systems, making it crucial in learning computer systems. It links to related units and bodies of knowledge between fundamental and advanced courses, playing an important role in establishing integrated knowledge framework for computer discipline. Students will acquire thorough understanding of the hierarchical structure of a computer system, establish comprehensive concepts of a computer system, understand and master the interface between hardware and software, develop their abilities and skills for analysis, design, and development of computer hardware and software systems.

Fig 1. Computer system hierarchical layers

Compiler Operating

System (ex:Windows xp)

Application (ex: browser)

Digital Design Circuit Design

Instruction Set Architecture

Datapath & Control

Transistors

I/O systemProcessor Memory Hardware

SoftwareAssembler

2009 Eighth IEEE International Conference on Embedded Computing; IEEE International Conference on Scalable Computing and Communications

978-0-7695-3825-9/09 $26.00 © 2009 IEEE

DOI 10.1109/EmbeddedCom-ScalCom.2009.110

560

2009 Eighth IEEE International Conference on Embedded Computing; IEEE International Conference on Scalable Computing and Communications

978-0-7695-3825-9/09 $26.00 © 2009 IEEE

DOI 10.1109/EmbeddedCom-ScalCom.2009.110

560

International Conference on Scalable Computing and Communications; The Eighth International Conference on Embedded Computing

978-0-7695-3825-9/09 $26.00 © 2009 IEEE

DOI 10.1109/EmbeddedCom-ScalCom.2009.110

560

Page 2: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

However, teaching of the curriculum comes with some difficulties. On one hand, the computing technologies related to the curriculum change rapidly, making much course contents out of date and thus unable to reflect and embody the state-of-the-art technology. On the other hand, the curriculum itself covers a broad range of knowledge and a large amount of contents, with a large amount of abstract concepts. As a result, students may feel the curriculum is tedious and complicated, which decreases their interests to learn. Without real and thorough understanding, students could quickly forget most of contents they learned.

Therefore, following rapid changes in computer technology, determining the emphasis and strategy for the course teaching, and improving its contents and teaching methods are some important issues that need to be solved in order for students to establish a solid foundation for their study and develop their abilities and skills to design hardware components or computer systems.

Based on the teaching practice of the curriculum at Nanjing University, this paper begins with the discussion on principles and goals of the curriculum. Then, it describes teaching philosophy and methods, improvements of contents, along with their effects, for lectures and experiments of the curriculum. Finally we review some experiences from the development and teaching of the curriculum. This paper intends to share experiences in teaching the course with other institutes in China and provide them with a potentially useful instructional model. 2. Principles and goals 2.1. Major issues for determining principles and goals of the curriculum

Before we determine the principles and goals of the curriculum, the fundamental issues that we have to take into account at first are: What should be learned by the students and what are they able to do with the knowledge after taking the course?

Focusing on these two issues, we consider the principles and goals of the curriculum from the following perspectives and concerns: (1). The rapid changes and evolution of computer technology The curriculum relates to a wide range of topics and contents in technology that rapidly changes. As a result, the curriculum should timely update and adjust its technical topics and contents so that students can learn the state-of-the-art technology.

(2). The role of the course contents As depicted in Figure 1, the core contents of the

curriculum are ISA and the hardware system used to implement ISA. Due to the fact that the course contents lie on the intersection of hardware and software and tightly links to the operating system, compiler/assembler, and programming, the design of hardware system can affect programming strategy and execution efficiency of programs. For these reasons, the course teaching needs to take adequate consideration of the issue of tight linkage between hardware and software, so that students can establish a comprehensive and integrated view of computer systems. (3). Job market demands and careers of students

The job market reveals that most of graduated students in computer science will be unlikely to work on CPU or other hardware designs. For example, some may be engaged in system software development; some on application development, some on administrations and maintenances of computer systems, some on computer sales business, and some even on areas unrelated to computer science. Therefore, the curriculum has to consider how to meet the needs of different students. When designing the course contents and teaching methods, we ought to consider and design a comprehensive knowledge framework and solutions for computer skill development from which all students could gain benefits. (4). Training students to be well-rounded and teaching them professional skills

The curriculum undertakes not only the task to educate students with computer knowledge, but also the duty to develop their professional skills for the real world. Thus, we ought to also develop students’ communication skills, creativity, ethics and values, work attitudes, and abilities to apply their knowledge. 2.2. Principles for designing the curriculum

Based on the consideration of the above perspectives, we determine the principles as follows to guide the design and development of the curriculum: (1). The curriculum must periodically update and adjust its topics and contents

In terms of the principles of IEEE/ACM 2001 CS Curricula Recommendation Report [1], the curriculum, similar to any other CS curricula, should be updated in a timely manner to reflect the state-of-the-art technology, and the course topics and contents need to be carefully adjusted to cover more recent technologies and core topics in greater details.

561561561

Page 3: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

(2). Hardware is tightly linked with software concepts and knowledge

In order for students to have a comprehensive understanding of computer hardware systems, we need to deal with and understand hardware from the perspective of programmers. Thus, the curriculum should not be merely a course that teaches purely hardware, but should also carry out the main idea that hardware and software are tightly linked. We ought to describe related software concepts and knowledge when explaining hardware. The curriculum not only develops students’ abilities to design hardware but also enhance their abilities to design software systems. (3). The course experiments should lead students make use of what they have learned.

The design and adoption of the course experiments should be helpful for students to develop their computer skills, including the abilities to use knowledge to analyze and solve practical problems and the abilities to design and develop practical hardware components or systems. (4). Include professional skills as an integral part of the curriculum.

In order to develop well-rounded students with professional skills, the curriculum needs to appropriately introduce concrete examples and the origins or evolving history of technology so as to promote the education of communication skills, creativity, ethics and values, work attitude for students. Some examples, such as Arianna 5 rocket explosion[2], an American Patriot Missile failure to intercept an incoming Iraqi Scud missile [2], and Intel Pentium Process Floating-Point Number Bug[3], are good case studies; and the origins and developments of micro-coding, pipelining, RISC, and RAID technology demonstrate creativity and innovation in science and technology. 2.3. Goals of the curriculum

Based on the above principles, we determine goals of the curriculum that aims to develop students’ abilities to analyze and design hardware components or computer systems, which is embodied as follows:

(1). By studying the course and practicing related experiments, students will be able to understand and master all aspects of a single-processor computer system, including the Instruction Set Architecture, the internal mechanisms and structures in detail for all components and the interconnections between these components. The emphasis of the curriculum is to develop students’ abilities to understand and master the state-of-the-art computer technology and knowledge, especially in pipelined CPU design.

(2). Students should understand the relationship and interaction between software and hardware and be able to design hardware-related software systems. The related contents include how operating systems cooperate and interact with hardware, how to make optimization for compilers based on pipelining, how to design and develop high quality programs with high efficiency by utilizing the advantages and features from hardware designs, how to debug and test programs, and so on.

(3). The curriculum should develop students’ abilities to utilize the concepts and knowledge from the course to analyze and solve practical problems, allowing them to be able to design hardware components or systems.

(4). The curriculum should establish a solid foundation for students to study other advanced courses necessary for their degree completion. 3. Teaching method and course content improvement

The curriculum refers to not only the hardware and the Instruction Set Architecture design but also software design for operating systems, compilers and programming. Based on this fact, we propose the teaching strategy and method “began from the programming perspective; stress the relationship between hardware and software; place emphasis on CPU design; and aim to enhance system performance”, based on which we have changed the traditional teaching style and method of this curriculum that usually isolated hardware from software and focused on teaching purely hardware. From the perspective of tight linkage between hardware and software, we explain related topics and knowledge, allowing students to learn and master the fundamental knowledge framework for the course and, at the same time, acquire important training and development for their abilities to analyze and design hardware components or computer systems.

In accordance with the new teaching philosophy and methods and in reference to well-known textbooks regard to the curriculum[2][3][4][5][6][7][8] and the lectures of the curriculum from top colleges in the world [10][11][12][13][14][15][16][17], we have improved the course contents as follows:

(1). Based on approach, “high-level programming language assembly language machine code instructions CPU design”, we reorganize teaching materials so that it is easier for students to acquire thorough understanding of a complete process from software design to compilation to execution in a CPU. This will help students to establish a comprehensive

562562562

Page 4: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

concept of computer systems. (2). In regard to CPU design contents, we added

design of the pipelined CPU and other advanced technology. Based on a progressive order “the IAS machine’s CPU bus-driven CPU single-cycle CPU multi-cycle CPU basic pipelined CPU advanced pipelined CPU”, using MIPS and Pentium 4 processors as blueprint, we will discuss and explain the CPU design, CISC, and RISC technology and the course of their development.

(3). While explaining the interaction between hardware and software, we adopt an approach that puts exception and interruption, memory access, and I/O access into the execution process of instructions. This way, a complete process of how hardware interacts with the operating system during CPU executing instructions can be clearly illustrated for students.

(4). When referring to programming-related materials (i.e., data types and arithmetic, data storage modes, instruction addressing modes, the temporal and spatial locality of cache access), we try to explain in details the relationship between hardware and software from many lower-level techniques, which we believe will be helpful for students to establish an understanding of hardware design from the programming perspective and software design from the hardware design viewpoint. Learning hardware design, students will enhance their abilities for software design as well.

(5). Incorporating the pipelining of a CPU, we explain how to optimize compilers. The regular curriculum for compiler usually does not refer to the compiler optimization based on the instruction pipelining technology; on the contrary, we cover all related issues such as different hazards during instruction executions, based on which we further discuss in details how to avoid or reduce the hazards by using a variety of compiler optimization techniques. 4. Contents, focal and difficult units of the curriculum

In terms of goals of the curriculum and our teaching experiences, we have elaborately arranged the contents, set concrete goals, identified focal units, listed difficult units and provided solutions as well for each of the chapters in the curriculum.

The contents of the curriculum are divided to 9 chapters.

Chapter 1 is the introduction that looks at the overview of computer systems, describes the role and position of the subject in a computer system, and discusses the methods and criteria for performance

measurement and estimation for computer systems. The goal of Chapter 2 is to provide students with

concrete understanding of machine-level data representation. The focal units include unsigned integer, two’s complement number system, and IEEE754 floating-point number standard. For students to gain concrete understanding of difficult units for the chapter, IEEE754 floating-point numbers including special numbers of NaN and infinite numbers, we explain the relatively abstract concept from the perspective of concrete declarations and conversions of data types and the calculations of an expression in a programming language.

Chapter 3 is for students to understand the arithmetic and design of the arithmetic units. The focal units are the addition and subtraction of both fixed-point and floating-point numbers, and the function and design of the ALU arithmetic units. For the difficult units on the multiplication and division of both fixed-point and floating-point numbers, instead of talking too much detail, we just focus on main ideas and methods of them. For the design of the ALU units, we start from arithmetic scenarios in programming, explain how arithmetic units work and how they are designed so that students can realize the importance of improving their software design from the hardware point of view.

Chapter 4 discusses the memory system, covering the focal units on hierarchical architecture of the memory system, temporal and spatial locality, the cache, virtual memory and address mapping. For the difficult parts such as the connection between main memory and CPU, and the mapping between the cache and main memory, we use concrete examples to give students the perceptual understanding of how these work. For another challenging part—virtual memory, by combining the concept with the process of transforming a high-level language program to the executable object program and the execution process of the program , we explain the virtual memory concept and describe how to divide virtual space and how to map and swap between main memory and the virtual memory on hard disks, providing students with a comprehensive understanding of the association between instruction system, hardware, operating systems and compilers.

Chapter 5 gives detailed discussion of instruction system and instruction set architecture, covering the focal units such as relationship between high-level programming language and machine language, instruction expressions and formats, addressing modes, CISC and RISC, generating process of executable object programs, and hardware supports to subroutine calls.

Chapter 6 discusses fundamental issues on CPU

563563563

Page 5: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

design, including the function and internal structure of CPU, instruction execution process, designs of datapath and controller, concepts of the exception and interruption, aiming to provide students with a solid foundation for further study of the pipelined CPU and other advanced technology of CPU design. The focal and difficult units include the timing of datapath, multi-cycle datapath and controllers, hard-wired controllers, micro-code controllers, and design and implementation of CPU with exception and interruption processing. Due to the fact that the focal parts are very detailed and tedious, our lectures focus on main ideas and primary design issues and leave details in textbooks and lecture notes for students to read after class.

Chapter 7 focuses on the pipelined CPU design, covering the concept of pipelining, the design of pipelined datapath and control signals, exception and interruption handling in a pipeline, and analysis on how the cache misses effect a pipeline. It also covers the focal and difficult parts such as hazards and their handling (structure hazard, data hazard and control hazard), data forwarding and stalling, branch prediction, superscalar and dynamic pipelining. For data hazard and data forwarding, we explain it in details by demonstrating concrete instruction execution process in a pipelined datapath. For control hazard and branch prediction, we use concrete examples as well. For example, we explain prediction situations in details from the instruction sequence converted from a loop program in a high-level language, which is helpful for students to understand the branch processing in a pipeline from the software perspective. For superscalar and dynamic pipeline, we use an approach “generally present a general framework of a dynamic superscalar processor at first, and then we look at detailed structure of a Pentium 4 processor as a concrete example.

Chapter 8 aims to help students understand the modes of bus connections between different components of a computer system, covering the focal units of the concept of buses, bus standards, and the bus interconnection architecture. For the difficult unit, the bus communication controlling, we just explain basic concepts and mechanisms for several bus communication controlling modes and leave detailed materials for students to further study themselves.

Chapter 9 discusses the structures of hardware and related software for input and output (I/O), establishing a solid foundation for students to further study operating systems. Its focal units include hard disk storages, structures of I/O interfaces, addressing modes for I/O ports, interruption-driven I/O and direct memory access (DMA). For the first difficult part, I/O addressing modes, we explain the independent I/O

addressing mode from Intel processors, but demonstrate the shared I/O addressing mode by asking students to complete an experiment of creating two I/O ports using memory addresses. For the second difficult unit, I/O interruption and DMA, we give concrete examples and thorough comparison to explain the concepts and mechanisms of the two modes.

5. Experiments

In the past, experiments are usually done on instructional machines that provide students with built-in experiments for students to mimic and verify. Thus it is hard for students to design and conduct new and creative experiments. Those verification experiments are usually isolated from each other and lack system-level association, which makes it hard for students to acquire an integrated concept of computer systems, let along lacking practice with advanced experiments such as designing the pipelined CPU.

Due to the fact that we have updated and added certain amount of new and advanced materials for lectures, especially those for CPU design and the pipelining of a CPU, it is now possible to offer advanced experiments that match and support the materials of the lectures.

We determine the goals of experiment teaching that emphasize on designing a pipelined CPU based on the strategy: “begin with ISA simulator, then functional components design, then designing a single-cycle CPU, and finally pipelined CPU design”.

To achieve the goals and plans as above, we have equipped our experiment lab with a large set of Altera DE2 experiment toolkits that allow students to use hardware description language and FPGA to conduct their CPU design experiments. The primary experiments consist of two stages: minor experiments to design functional components and a comprehensive experiment to design a CPU—either a single-cycle CPU or a multi- cycle CPU or even a pipelined CPU.

Good effects have been emerging from the efforts we have made to improve the curriculum in both lecture and experiments. The results have shown that the majority of students can complete their CPU design projects – either a single-cycle CPU or a multi-cycle CPU, and some of them can accomplish their design for a 5-segment pipelined CPU.

Through experiment design, students have significantly increased their interest and confidence for CPU design. One group has even completed its design for a 5-segment pipelined CPU of 29 instructions (a subset of MIPS32) with data forwarding and stalling functions (including load-use hazard, branch hazard, jump and multiplication instruction). The group has

564564564

Page 6: [IEEE 2009 International Conference on Scalable Computing and Communications; Eighth International Conference on Embedded Computing - Dalian, China (2009.09.25-2009.09.27)] 2009 International

submitted its design report to Altera for participating in “2009 Altera Asia Innovation Design Competition”[9]. The project aims to design and implement a 5-segment pipelined processor that is compatible to the MIPS32 Instruction Set Revision 2.62, with more than 90 instructions, including 21 for arithmetic, 13 for branch, 14 for load and store, 8 for logic operations, 6 for shifting, 6 for data moving, and 14 for trap. It will cover all fixed-point arithmetic instructions and also extend design to implement floating-point instructions. The arithmetic components used for the pipelined CPU will include carry look-ahead fast adder, bucket shifter, multiplier based on bit-pair Booth-Encoded Wallace-tree, and SRT-based division component. It will also implement the cache and a co-processor for processing interruptions and exceptions and managing the cache and virtual memory.

The eventual goal of the curriculum is to develop joint experiments with other related curricula, such as designing and developing prototypes of an assembly language, a high-level programming language, an operating system, and a compiler; and developing test applications and run them on designed CPUs.

6. Conclusion and discussion

The contents of the “Computer Organization and

Architecture” curriculum are the kernel part of a computer system. If the integrated knowledge framework of a computer system is metaphorically treated as a building, the concepts and knowledge from the curriculum would be the foundation. However, the related technology and materials of the curriculum come with a broad of range, a large amount of volume, and rapid changes and evolution. We have to not only teach the traditional and typical knowledge of the curriculum, but also be sensitive to follow and update the state-of-the-art technology; not only cover all required facets of the curriculum, but also place emphasis on key subject matters; not only allow students to learn and master the fundamental concepts and knowledge, but also let them master design technology for hardware components or computer systems from doing many experiments. Obviously, the curriculum is difficult and leaves a lot of challenges for us.

In order to accomplish quality and high standard teaching of the curriculum, we have determined a set of principles which stress the importance of following the rapid changes in technology and updating the state-of-the-art technology to the curriculum and the adoption of a systemic viewpoint of linked hardware and software to help students to understand computer

systems. According to these principles, we have defined the overall goals of the curriculum to develop students’ abilities to analyze and design hardware components or computer systems. Based on the principles and goals, we have taken steps to improve the contents of the curriculum, exploring the teaching philosophy “look at hardware from the perspective of software, and better understand software from hardware.” At the same time, we adopt a gradually progressive approach, from the simple to the complicated, to teach a variety of CPU design technology and instruct the experiments for students.

The quality of the course teaching will directly affect the quality of graduated students. Although we have made a lot of efforts to teach the curriculum, there are still a lot of areas for us to improve. We believe that, along with more attention and efforts from domestic educational institutes and teachers working on the curriculum in China, the curriculum will continue its development and improvement so that the education quality for the computer discipline can be further enhanced as well. References [1] The Joint Task Force on Computing Curricula IEEE

Computer Society and ACM, Computing Curricula 2001 Computer Science-Final Report, 2001

[2] R. E. Bryant, D. O'Hallaron. Computer Systems: A Programmer's Perspective, Printice Hall, 2003

[3] D. A. Patterson, J. L. Hennessy. Computer Organization and Design: The Hardware/Software Interface, 3rd Ed., San Mateo, CA: Morgan Kaufman, 2004

[4] J. L. Hennessy and D.A. Patterson, Computer Architecture: A Quantitative Approach, 3rd Ed., San Mateo, CA: Morgan Kaufman, 2002

[5] V. P. Heuring, H. F. Jordan, Computer Systems Design and Architecture, 2nd Ed., Pearson Education, 2004

[6] Y. N. Patt, S. J. Patel, Introduction to Computing Systems From Bits and Gates to C and Beyond, 2nd Ed., The McGraw-Hill, 2004

[7] C. amacher, Z. Vranesic, S. Zaky, Computer Organization, fifth Ed., The McGraw-Hill, 2002

[8] W. Stallings, Computer Organization and Architecture Design for Performance, 7th Ed., Prentice Hall, 2006

[9] J. Xu, S. B. Xue, X. H. Xu, and Z. S. Zhang, Design and Implementation of the MIPS32 Pipeline Processor Based on FPGA, design report for participating in “2009 Altera Asia Innovation Design Competition”

[10] http://inst.eecs.berkeley.edu/~cs61c/su08/ [11] http://inst.eecs.berkeley.edu/~cs150/sp09/ [12] http://inst.eecs.berkeley.edu/~cs152/sp09/ [13] http://www.stanford.edu/class/cs107/ [14] http://www.stanford.edu/class/ee108b/ [15] http://www.ece.cmu.edu/~ece447/ [16] http://www.cs.uiuc.edu/class/sp08/cs232/ [17] http://6004.csail.mit.edu

565565565