前 言
尽管“微机原理与接口技术”在计算机、通信、电子工程、工业自动化和机械制造等专业学科中具有十分重要的地位,但至今,诸如为什么要在如此多的专业中安排学习这门课,为何长期以8086/8088微机系统及其接口作为学习的基本内容等问题,一直是热门话题。对此,作者认为传统“微机原理与接口技术”课程的基本内容仍然具有极大的重要性和必要性。
(1)内容的典型性和完整性。从最早的计算机原型——图灵机,经过长期发展至今,计算机已遍布人类生活生产的各个角落。计算机也分化成了多种类型,如微控制器、手持式系统(手机、平板等)、笔记本电脑、PC机、工作站、服务器、数据中心、大型计算机、超级计算机等。这些种类的计算机系统间,有些界限模糊,有些差异巨大,但共性的部分也有不少。PC机是其中最为典型的代表,它比微控制器、手持式系统结构复杂,比工作站、服务器等更常见,比较适合学习。然而面对有限的课时数,现代PC机所涉及的原理与接口技术在一门课程中是无法讲述完整的。如现代PC机中的内部总线PCIe无法在短短的几节课中解释明白,更不用说编程实践了。那么,若把内容进行压缩作简要介绍,又失去了系统性和完整性,势必导致盲人摸象,学而不知其所以然。
于是IBM?PC就成为了“微机原理与接口技术”这门课程最好的教学模型机。在有限的学时里,可以把8086/8088系统讲述完整,给读者一个完整系统的概念。
(2)良好的兼容性及其原理的可延伸性。Intel的8086/8088微处理器是IBM PC的核心,作为16位处理器,其存储器结构和指令集在Intel x86的历代处理器中被完整保留下来,无论是32位还是64位x86,都有8086兼容的工作模式,可以做到对8086代码的二进制兼容。这种兼容给课程学习带来了方便,在任何一台x86的笔记本电脑或PC机上,不论是Windows系统还是Linux系统,简单安装上一个VM软件(虚拟机)即可再现8086环境。
事实上,虽然PC机发展了多年,但兼容性一直是PC机的突出优点,而且早期PC 机——IBM PC机在本质结构上和现代PC机是基本一致的,即虽然从早期的8086、8088、80x86到后来的Pentium系列以及现在的Pentium 4和多核技术,无论其制造工艺还是技术和性能,都有了极大的改进和提高,但从编程的角度看,仍然属于同一系列,且完全兼容,并无本质区别,指令系统从8086到Pentium系列,除部分保护模式下扩展指令外,80%以上完全相同;在应用程序中所用到的绝大多数指令依然是基本指令集中的指令,即8086指令集;虽然微机连接的外部设备越来越丰富,但中断工作的原理和输入/输出控制理念没有变化;此外随着大规模集成电路技术的发展,主板上曾经大量独立的接口芯片都已被集成到少数芯片中,但8255、8259A、8254、16550等可编程接口芯片依然存在且用法未变。
(3)技术开放,资料全面详细。基于8086/8088的IBM PC系统中的各个部分,无论是CPU结构还是总线和外设接口都不止一次地被分析和重构过,导致8086/8088系统的技术资料非常容易被找到。而且,由于时效性的缘故,基本上不存在技术保护的壁垒。这样的教学模型机更加有助于对学有余力的同学进行课程内容外的学习。
(4)课程内容更新和拓展的空间大。8086/8088的学习者和教师,很容易迁移到32位x86系统。这是由于486以及Pentium的开源模拟器早已出现,486微机系统的FPGA全HDL描述也已经实现。因此以8086/8088为核心的微机原理与接口技术课程内容很容易更新为32位处理器架构的内容。此外,8086/8088系统的HDL描述完整透明,可以在单片FPGA上重构8086/8088系统,使教学内容更易于与SOC技术整合(这也是本书重点讨论的内容),提高教学成效,开拓实用领域,提高学习者的兴趣。
(5)知识结构完整。早期CPU以CISC为主,而现代新设计的CPU基本上都是RISC架构的,例如,Intel的8086指令属于CISC,而ARM是RISC架构的。从当前的计算机发展情况看,RISC具有明显优势。于是有人简单地下结论,x86的架构体系在先进性上不及ARM架构。其实不然,早在1995年,Intel的David B.Papworth等设计了x86架构的Pentium Pro处理器,在这个处理器中,x86指令先被解码为类似于RISC指令的微操作,再被RISC内核执行,这种方式一直延续至今。因此,以x86指令属于CISC指令集来否定x86显然是不对的。Intel采用CISC和RISC融合的x86内部架构,实现了兼容性和性能上的完美平衡,绝不失先进性。
(6)作为能力培养,容易触类旁通。仅仅通过学时数并不多的一门课的学习,学生便能掌握以8086/8088为核心的PC系统的原理和编程控制方法,形成对计算机系统全面完整的系统概念。这些内容包括计算机系统的处理器、内存、外部储存器、输入/输出、通信接口以及大量的计算机系统的基本概念和软硬件知识等。而现代PC中的PCIe总线、SATA硬盘接口、USB、DDR3、南桥芯片组都是8086微机原理与接口技术中的技术升级,都包含了这些早期技术的影子。显然掌握这些基础内容,容易触类旁通,举一反三。
有不少用户曾提出,ARM系统新颖实用,应该取代传统的Intel 8086/8088系统,成为“微机原理与接口技术”教学的主要内容,作者并不认可。
(1)典型性不够。ARM公司的各代处理器以微控制器和手持系统为主。微控制器只是一种简化的计算机系统,即手机与平板等手持式系统,受制于体积和功耗,往往是定制系统,扩展性很差,不具有典型性和一般性,其接口知识也不易推广到其他系统。
(2)开放性不够。ARM公司本身不生产芯片,而是通过把ARM处理器IP核授权给其他厂商进行系统生产,这导致其尤其重视知识产权的保护,因此从未公开过ARM处理器的详细内部结构,且严厉打击仿制兼容ARM处理器或公开其内容的行为。因此关于ARM内部结构资料仅限于有限的公开资料和开发者的猜测。显然,资料的不系统性、不完整性、应用对象的非一般性以及接口系统的不一致性,成了此课程教学的最大瓶颈。此外,普通学习者无法获得ARM系统的全HDL描述,因此无法实现基于FPGA和全HDL的SOC系统创建,也就无法更深入地从微观和宏观两方面认识和学习这一系统。
(3)实践成本高,学习有局限性。ARM官方的软件工具价格昂贵,对于一般的学习者,面向修改内部设计只能纸上谈兵。实验设计中有较多开源或者授权的软件开发工具,导致学习者多数情况下只能局限于软件编程,对于其中的原理学习和对应的接口实践活动有很大的局限性。
(4)学习内容无以此及彼的可推广性。各代ARM处理器之间不像x86那样具有良好的兼容性和继承性。例如,已过时的ARM7/ARM9的接口技术和构架原理属于ARM v4架构,已不同于现在ARM公司主推的Cortex-A和Cortex-A50系列的ARM v7架构。
显然,“微机原理与接口技术”中的传统内容仍然拥有不可替代的合理性、必要性和重要性。当然,这并不意味着针对这些内容的教学和实验只能停留在原有的基础上。
随着超大规模集成电路设计技术、EDA技术、大规模可编程应用技术、片上系统(SOC)技术和嵌入式系统等应用技术的发展和推广,基于这些全新的技术层次,工程技术学科间的边界变得不断模糊,内容相互渗透,技术手段不断充实、学科知识不断融合、学科内涵不断延拓,应用领域不断扩大。于是,这些赋予了全新生命力的原本独立的领域具备或兼备了更一般化和更高效的研究与设计手段,并更有效快捷地融合或吸收了其他领域的先进技术和方法。这些变化很快在国内外高校的教学和实践中有了相应的反应。
这里不妨从DSP开始,对相关教学内容的变化作一简要说明。
早期的数字信号处理(Digital Signal Processing,DSP)可归为一个独立的学科领域,主要研究针对特定对象的DSP算法及DSP的技术实现。对于后者,最早的以及被广泛接受的是利用TI公司的数字信号专用微处理器来实现。而TI公司在每一片处理器芯片的表面印上了大大的DSP?3个字母,期待芯片使用者在潜移默化中将TI与DSP等同起来,将Digital?Signal?Processing和Digital?Signal?Processor等同起来,即暗示DSP中的P是Processor。使用户逐渐确信DSP处理器就是TI生产的,而DSP算法则必须用Digital Signal Processor(其实正确的表述应该是Digital Signal Processing Processor)来完成。
TI的这种概念偷换确实产生了效果。2002年,一位负责《现代DSP技术》一书审稿的教授认为此书的题目不妥,不应该用DSP,理由是全书完全没有涉及使用TI的DSP处理器的内容,甚至不涉及任何处理器的应用。我们给出版社的解释是,所谓DSP就是Digital Signal Processing,绝非Digital Signal Processor。DSP只是一种算法,只要能快速完成这种算法,任何方法都能用。《现代DSP技术》一书就是讨论使用FPGA的纯硬件方式来实现DSP算法。由于DSP中乘法累加是最基本的算法,所以Altera公司在其技术资料中将嵌入于FPGA中可编辑硬件乘法器直接称为“DSP模块”。按照DSP的算法要求,全部使用加法器和硬件乘法器等硬件模块搭建算法系统同样可以高效完成DSP算法;其工作效率、工作速度和工作可靠性都优于普通的DSP处理器,这在图形处理和数字通信中具有广泛应用。显然DSP技术与EDA技术是相通的。
DSP的实现不仅可以借助于专用DSP处理器或纯硬件的算法系统完成,也能利用嵌入式系统来完成。例如,32位Nios II可重构型嵌入式微处理器同样能完成不同类型的DSP算法,条件是针对具体的算法特征用VHDL描述对应的算法模块,然后将这些模块为Nios II处理器配置成专用指令,再通过SOPC Builder(现在升级为Qsys)软件将此指令融入Nios II的C编译器中,同时重构Nios II,使其融入新指令的硬件结构。从此,在编程中就可在C环境中直接调用并编译具有高速运算性能和具备DSP算法功能的硬件指令。这种硬件指令是典型的精简指令(RISC),而对应的处理器就能运行这种指令。于是DSP技术、EDA技术、嵌入式系统应用技术、片上系统技术和计算机组成与设计技术便融为一体。这部分内容我们写入了清华大学出版社出版的《SOPC技术实用教程》一书中。
其实,此后不久,许多更新的技术和软硬件工具与以上提到的新技术平台产生了密切的交集。例如,著名的MathWorks公司推出的被广泛应用于许多研究与工程技术领域的业界杰出的数学集成与仿真工具软件MATLAB,为DSP、数字通信、电子工程、EDA、嵌入式系统和SOC等领域增添了设计与仿真平台以及与对应工具软件的输出接口。
例如,可以利用MATLAB的Simulink数学模块图形编辑平台,将数字通信领域的功能模块(如DDS模块)或DSP的算法模型(如FIR或FFT等模块)用图形表达出来,或是将能配置于32位Nios II嵌入式处理器软核的具有特定功能的精简指令(如用于DSP领域或电机控制领域的指令)表达出来,甚至将可编程嵌入式系统总线上接插的功能模块(如VGA显示控制模块或PWM信号发生模块或LED屏幕扫描显示控制模块等)表达出来。所有这些功能模块都可以在MATLAB平台进行功能测试和系统仿真,甚至利用后台的Modelsim软件进行功能仿真。基于MATLAB/Simulink的功能模块或系统模块的设计文件可向与之接口的转换软件输出,利用转换软件转换成指定的目标文件继续处理。例如,可以利用第三方的DSP-Builder将MATLAB输出的设计文件转换成便于逻辑综合的VHDL代码,再由与DSP-Builder接口的Quartus II软件针对选定的FPGA目标器件进行逻辑综合与结构综合,最后在芯片中实现既定的硬件功能。
由于MATLAB和处于后台的DSP-Builder、Modelsim和Quartus II等工具软件相互间有良好的接口,几乎所有设计、测试、仿真、硬件实现和硬件测试都可以在MATLAB/ Simulink界面上控制完成;这包括算法模型的建模(如FIR模型)、系统仿真、功能仿真(后台调用Modelsim)、VHDL转换(后台调用DSP-Builder)、逻辑综合(后台调用HDL综合器)、时序仿真、编程下载、嵌入式逻辑分析仪硬件测试等;如果涉及嵌入式系统的指令设计或接口模块设计,还要利用SOPC-Builder对C编译器和CPU进行重构。于是,各学科在更大的平台上得到了融合。我们将这其中的部分内容并入到了清华大学出版社出版的《EDA技术与Verilog HDL(第2版)》一书中。
传统的单片机技术和应用曾一直是独立于其他学科领域的。单片机的应用开发只是围绕既定的单片机芯片来展开的,单片机系统的功能和适用领域仅取决于所用的单片机器件本身的结构特点和资源配置,而涉及的知识也不会超越单片机及其接口本身。然而随着EDA技术的发展和SOC技术的应用,以及许多有待开发的项目,在其高可靠、低成本、高速度、易升级等性能的要求下,一片传统意义下的单片机已难以适应,于是有了基于SOC片上系统的单片机系统开发需求。以51单片机为例,基于SOC的51单片机系统开发过程是,将几乎整个系统编辑构建于一个单片FPGA芯片中,其中包括51单片机CPU软核、嵌入其中的数据RAM和程序ROM、接口控制模块、键盘和显示控制模块、A/D和D/A采样和信号输出控制模块、各种通信模块等。当整个硬件系统构建、测试与仿真完成后,将进行软件设计与调试。于是单片机开发工程师必须具备EDA技术、硬件描述语言、SOC开发技术等多个领域的知识。我们曾将这些相关的知识编写进了清华大学出版社出版的《单片机原理与应用技术》一书中。
新技术在教学领域的渗透是全方位的。当我国高校计算机专业大多数师生还围绕着庞杂而无实用意义的,由分离器件构建的8位模型机进行“计算机组成原理”课程的教学和实验并仍停留在原理认知和模型验证时,美国麻省理工学院已开设了“计算机系统设计”课程,其本科学生在实验中基于硬件描述语言自主完成ALU、不同指令周期的CPU,乃至实现流水线32位MIPS CPU和Cache的设计;而斯坦福大学计算机系本科生对应的课程是“计算机组成与设计”。实验要求学生以各自独立的形式,用VHDL自主实现CPU、VGA显示控制模块等接口设计,最后实现于FPGA中,并完成软硬件调试。这些学校还将实用CPU设计作为教学实践项目引入电子信息工程等专业中。在参考了这些学校的教学实践内容后,将传统的计算机组成原理课与EDA技术、SOC技术、不同位宽不同体系结构CPU的设计技术融为一体,推出了《现代计算机组成原理》一书(科学出版社出版,第2版),被评为国家级精品教材。其中包含了基于FPGA单片硬件平台的8位、16位和32位CPU的设计,以及基于微程序指令、状态机指令、RSIC精简指令等不同指令形式的微处理器设计的教学与实验内容。
毫无疑问,对“微机原理与接口技术”的教学内容、实验方法和培养目标等方面都到了需要进行革新的时候,本教材正是在这样一个背景下推出的。
本教材将基于FPGA应用开发技术、EDA技术、基于SOC的微机系统构建和测试技术等新内容引入“微机原理与接口技术”传统教学内容之中,为这一课程注入了全新的生命元素。所谓传统内容,即以Intel 8086/8088为基础,兼顾高性能微处理器80x86以及Pentium系列的介绍,包括微处理器结构、指令系统、汇编语言程序设计、存储器系统、总线技术、中断技术、定时/计数接口技术和DMA技术,以及并行接口技术、串行接口技术、模拟接口技术和其他实用的接口技术。读者将通过新融入的内容在更广阔的视野和更大的深度上提升对“微机原理与接口技术”课程的学习效果,同时将这些内容与EDA技术、FPGA开发技术和SOC片上系统技术有机地融合起来,全方位强化和拓展了这一传统教学领域中的知识与现代技术技能的掌握。本教材的特色主要有如下4点:
(1)将EDA的时序仿真技术全方位融入其中,利用时序仿真技术和在系统测试技术从多角度向读者展示接口器件及其电路系统的工作细节和时序特性。
(2)所有涉及接口技术的章节都安排了针对本章内容的SOC技术和相应的实验项目,使读者从这些新颖的内容和极具启发性的实验中高效率地掌握课程给出的实用的接口技术及其基本原理。
(3)各章的实践示例部分显示了明显的阶梯承接性关系,从最简8088 SOC微机模块的构建、仿真和硬件测试,到随章节的深入逐步加入的不同接口器件(包括8255、8254、8259、16550、8237等IP软核)的SOC微机系统的创建、软硬件调试,直至将整个完整的可运行不同操作系统的类IBM PC/AT的8086 SOC系统在一个单片FPGA中呈现给读者,使读者在基本原理方面、接口技术方面、完整系统构建方面以及现代技术的应用方面有了更好的理解和掌握。
(4)全书奉献给读者的不仅是传统观念下的“微机原理与接口技术”,而是包括了基于FPGA开发技术和SOC技术的接口电路设计技术以及EDA的实用技术等,使传统的“微机原理与接口技术”知识在一个全新的平台上与大量的新知识新方法新技术新工具完成有机整合,从而能大步超越此课程原有的知识定位和学习目标。
本书内容具体安排如下:
第1~4章基本属于此课程的传统编排方式:第1章概述微机系统;第2章介绍80x86微处理器的功能和结构;第3章介绍8086/8088 CPU的指令系统;第4章介绍汇编语言程序设计。与传统所不同的是,为了适应此后加入的基于FPGA的IBM PC片上系统的构建与设计实践方面的内容,在第2章中增加了8088 IP软核接口和用法的内容,在第4章中增加了简化段定义格式的汇编程序结构。
第5章介绍存储器。本章最后部分启动了SOC的内容,其中包括在Quartus II平台调用嵌入式存储器的方法、8088微机最小SOC系统构建、仿真和软件测试。在时序仿真工具及其他在系统测试工具(如In-System Memory Content Editor)的帮助下,读者可以清晰地观察和精确地定位CPU在指令代码运行过程中所有的时序以及存储器内容的实时变化情况,包括8086/8088流水线方式读取指令代码的时序细节。这对深入学习微机原理和接口控制时序十分有帮助。这些信息在传统方式下是完全无从获得的。
第6章介绍微机系统的输入/输出接口基本知识。最后,在第5章原有的SOC基础上,介绍了构建对应于第6章内容的不同接口电路的步骤、测试方法、硬件实现方法以及各种先进的测试工具的用法,如In-System Memory Content Editor、In-System Sources and Probes Editor或SignalTap嵌入式逻辑分析仪。使读者能进一步熟悉微机工作原理和熟悉微机系统构建及调试方法,将微机接口技术、EDA技术与SOC技术更好地融合。
第7~12章分别介绍了微机系统中常用的可编程接口器件8255A、8254、8259A、16550、8237A和A/D与D/A控制模块的结构原理、基本用法和对应的接口技术。在各章的最后,针对该章的基本内容都安排了包含对应接口器件IP核的SOC系统构建、硬件仿真、软件调试和FPGA平台系统实验方面的内容,而且相关的知识点和软硬件设计内容是逐章累加的,使得读者能通过各章的理论学习和对应的软硬件实验,逐步建立起对微机及其接口系统的完整概念。
例如,在第9章(介绍中断接口技术和中断控制器8259A的用法)的一个实验示例中,为了能使系统自动演奏出《我的祖国》的乐曲,需要构建起一个更完整的系统;于是介绍了基于SOC的微机系统的更完整的构建、软硬件实现和测试过程。这个系统包括8088 CPU软核、嵌入式锁相环(为不同器件提供时钟)硬核、8254软核、8255软核、8259软核、嵌入式存储器、总线控制模块、片选译码模块和对接口的控制模块等。其中许多内容是在前几章中介绍过和实验中用到过的模块和IP核。
第13章介绍了置于单片FPGA中的基于8086 IP的完整的SOC微机系统的结构、构建及运行等情况。这是一个经典IBM PC的单片微机系统,内部系统通过FPGA外围连接了键盘、鼠标、VGA彩色显示器、硬盘(用SD卡代替)等接口设备(BIOS设在FPGA内部),整个系统能运行MS-DOS和Windows 3.0,并在这些操作系统上能运行许多传统软件。这部分内容无疑将进一步激发读者对微机原理与接口技术、SOC技术和EDA技术的学习、掌握和应用的兴趣,并有利于培养读者的自主创新能力。
为了降低学习的门槛,本书中相关的实验尽量用原理图表述,尽量不涉及HDL编程。只要初步学习过EDA技术课程,就能直接学习此教材了。
为了利于读者的学习和实践,书中各章都安排了对应的设计示例、实验任务和自主设计项目,且大多数都能提供相关的工程设计源文件。
与此书相关的资料,包括本书的配套课件、实验示例源程序资料等文件资料都可免费索取,可浏览www.kx-soc.com,或直接与清华大学出版社联系,欢迎读者对本教材相关内容进行交流和探讨(作者电子邮箱:pmr123@sina.com.cn)。
本书作者潘明是桂林电子科技大学教师,潘松和黄继业均为杭州电子科技大学教师。
作 者
2015.1?
·VI·
·V·