除课堂理论教学外,还有实践教学部分,分随堂编程实验硬件设计实验两种。此外,对少数学生还开设了创新实验课程,以进行创新项目指导。

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荣誉提名奖,还在全国大学生电子设计大赛嵌入式邀请赛中获二等奖