本课程主要针对寄存器传送级以上层来介绍单处理器计算机系统中各部件的内部工作原理、组成结构以及相互联系。包括计算机系统概述、计算机系统性能评价、数的表示及其运算、存储器的层次结构、指令集体系结构、数据通路和指令控制流程、控制器的设计、微程序设计原理、总线互连、中断和输入输出组织等。
本课程分理论教学和实验教学两个部分,是学年课程,大约120学时。第一学期是课堂理论教学,周学时为4,大约66学时左右,占4个学分。
理论教学的知识模块顺序及其对应的学时分配如下:
第1章 计算机系统概述(4学时)
1.1 计算机发展历程(1学时)
1.2 计算机系统组成及层次化结构(1学时)
1.3 计算机系统性能评价(2学时)
第2章 数据的机器级表示(6学时)
2.1 数值数据的表示(3学时)
2.2 非数值数据的表示(0.5学时)
2.4 数据宽度、数据排列和对齐方式(0.5学时)
2.5 数据校验码(2学时)
第3章 运算方法和运算部件设计(8学时)
3.1 高级语言和机器指令中的运算(1学时)
3.2 算术逻辑部件(1学时)
3.3 定点数运算及其运算部件(4学时)
3.4 浮点数运算及其运算部件(2学时)
第4章 存储器分层体系结构(10学时)
4.1 存储器概述和主存储器(4学时)
4.2 高速缓冲存储器(Cache) (4学时)
4.3 虚拟存储系统(2学时)
第5章 指令系统设计(4学时)
5.1 指令格式、寻址方式、指令系统实例(2学时)
5.2 MIPS的汇编与机器指令表示(2学时)
第6章 中央处理器设计(10学时)
6.1 CPU概述、指令执行流程(1学时)
6.2 单周期数据通路和控制器设计(3学时)
6.3 多周期数据通路和控制器设计(3学时)
6.4 微程序控制器设计(2学时)
6.5带异常处理的处理器设计(1学时)
第7章 指令流水线设计(6学时)
7.1 流水线处理器设计(2学时)
7.2 流水线冲突及其处理(2学时)
7.3 高级流水线技术(2学时)
第8章 系统总线 (4学时)
8.1 总线基本概念和总线设计要素(2学时)
8.4 总线标准和总线结构(2学时)
第9章 输入输出组织 (12学时)
9.1 输入/输出设备(2学时)
9.2 外部存储设备(2学时)
9.3 I/O接口(2学时)
9.4 程序直接控制I/O方式(1学时)
9.5 程序中断I/O方式(2学时)
9.6 DMA方式(2学时)
9.7 通道和I/O处理器方式(1学时)
复习总结(2学时)
除课堂理论教学外,还有实践教学部分,分随堂编程实验和硬件设计实验两种。此外,对少数学生还开设了创新实验课程,以进行创新项目指导。
1. 随堂编程实验
为了使学生能更好地从程序员角度理解计算机组织和系统结构的内容,我们设计了一组编程实验。这组编程实验设计的出发点是使学生能“从程序员视角理解计算机系统结构和硬件设计,从系统结构和硬件设计者的视角理解程序执行”。
这组实验和课堂教学同步进行,目前共设计了以下7个实验:
(1) hello.c可执行程序的生成
通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。
(2) 无符号数和带符号整数的表示
通过无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示。
(3) 浮点数的表示
通过对float和double型数据的各种编程实践,了解IEEE 754浮点数在机器中的应用,特别是对一些特殊运算(如除数为0、负数开方等)的处理,从而深刻理解“异常”的概念。
(4)数据的存放顺序和对齐方式
通过对各种不同长度数据类型变量及其地址的打印输出,了解数据在机器中的存放方式和对齐方式。
(5) 类型转换和移位操作运算
通过高级语言中数据类型的转换和移位操作结果,更好地理解指令系统设计和计算机硬件设计所需满足的要求和需要考虑的问题。
(6) 整数和浮点数的算术运算
通过检查高级语言中数据运算的不同结果,进一步理解机器代码在CPU中的执行过程,从而为更好地学习指令系统设计和CPU设计打下良好的基础。
(7) cache和程序访问的局部性
通过对一组不同参数的设置和对二维数组不同的访问顺序,来验证局部数据块大小对程序执行效率的影响,从而了解程序访问的局部性对带有cache的计算机系统性能的影响。
通过编程实验,大大增强学生对课程内容的感性认识,使枯燥、抽象的课程内容变得具体而有趣,从而培养学生对课程学习的兴趣,也更加深刻理解课程内容与程序设计之间的关系。
2. 硬件设计实验
目前放在理论教学随后一学期。周学时为3,共计大约50学时左右。
由于近年来对课堂教学内容进行了大幅改革,加大了对CPU设计、特别是流水线CPU设计的教学力度,使学生打下了很好的理论和技术基础。同时,硬件教学实验室配置了Altera DE2实验板,因而学生可以通过硬件描述语言和FPGA进行CPU设计实验。
实验采用“基于硬件描述语言和FPGA,以功能部件设计为先导,单周期CPU设计为过渡,最终实现流水线CPU”的实验教学方案。实验要求学生先使用Quartus II开发工具进行模拟设计,通过后再下载到Altera DE2的FPGA板上进行综合验证。实验以实现MIPS指令系统的一个子集为目标,至少包括以下22条指令(基本涵盖了各种不同类型的定点指令,不需实现MMU和cache,采用大端方式):
add rd,rs,rt、addu rd,rs,rt、addi rt,rs,imm、addiu rt,rs,imm、sub rd,rs,rt
subu rd,rs,rt、nor rd,rs,rt、xori rt,rs,imm、clo、clz、slt rd,rs,rt
sltu rd,rs,rt、slti rt,rs,imm、sltiu rt,rs imm、sllv rd,rt,rs、sra rd,rt,shamt
blez rs,imm、j target、lwl rt,offset(base) 、lwr rt,offset(base) 、lw rt, imm(rs)
sw rt,imm(rs)
实验分两个阶段:功能部件设计实验阶段(不分组)和综合设计实验阶段(3-4人/组)。内容主要包括:寄存器组、ALU和ALU控制器、桶形移位器、乘法器、除法器、单周期CPU、多周期CPU和流水线CPU的设计。其中,最终的流水线设计为综合设计实验。
从最近两届学生实验结果来看,大部分学生都能完成一个具有22条基本指令的单周期或多周期CPU;部分同学能完成一个五段基本流水线CPU设计;有些能力强的学生甚至完成了带转发和阻塞功能(包括Load-use冒险、分支冒险、Jump指令阻塞、乘法指令阻塞)、并能处理异常和中断的五段流水线CPU设计。
通过硬件设计实验,大大加深了学生对课程内容的理解,不仅掌握了CPU设计的理论知识,也深刻理解了整个计算机系统的设计思想和方法,同时还培养了部分学生对计算机硬件设计的兴趣和信心。
3. 创新实验课程
创新实验课程以学生自愿为主,在完成课堂教学和实验教学阶段以后,专门为少数学生开设,有课程实验小组的老师和硕士研究生指导。创新实验课程的范围主要涉及数字电路设计、计算机功能部件设计、CPU设计、ISA模拟器设计,以及嵌入式系统设计等。
例如,四年级的一个小组在2008年课程实验结束后,张泽生老师继续为其开设“MIPS处理器设计”创新实验课程,继续开展流水线CPU设计创新项目研究,设计实现了一个与MIPS32 2.62兼容的82条指令(包括21条算术运算、13条跳转、14条存取、8条逻辑运算、6条移位、6条数据传送以及14条自陷指令)的五级流水线CPU,运算部件包括超前进位加法器、桶形移位器、基于基4-Booth编码和Wallace树压缩的乘加器以及基于SRT的除法器。最终该小组的创新项目“基于FPGA的MIPS32流水线处理器的设计与实现”获得了2009年Altera创新设计大赛中国大陆赛区二等奖。
在已毕业的学生中,我们曾经开设过“计算机模拟仿真系统的设计”、“嵌入式系统设计”等创新项目课程。俞建新副教授指导的创新实验课程小组参加了2006年微软全球嵌入式系统设计大奖赛,荣获微软公司多媒体奖,同时在IEEE CSIDC2006国际嵌入式系统设计比赛中荣获IEEE荣誉提名奖,还在全国大学生电子设计大赛嵌入式邀请赛中获二等奖。 |