首页>参考读物>电子电工>电子工程

兼容ARM9的软核处理器设计:基于FPGA
作者 : 李新兵 著
出版日期 : 2012-04-09
ISBN : 978-7-111-37572-2
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 401
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书讲述了FPGA设计的一般方法和概念。通过对ARMv4架构的解析,使读者对于ARMv4架构及CPU的运作原理有一个充分的认识。结合认识,作者详细介绍了如何在不到1800行的Verilog代码里容纳ARMv4架构,自己动手写一个ARM9的IP核。书中对于内核测试,结合一些开源工具运行操作系统也进行了详细的介绍。

图书特色

兼容ARM9的软核处理器设计
基于FPGA
李新兵 著
封面:
国内首本从Verilog设计与实现角度全方位剖析ARM架构的经典著作
仅用1800行代码勾勒出ARM9的核心部分,并结合FPGA运行uClinux操作系统
既有ARM内核实现的分析,又有开发工具链的实战指导,极具可操作性
封底:
自己设计一个CPU,并亲眼看到它可以运行程序,这永远是计算机教学中最令人兴奋且最具挑战性的事情。本书以CPU中日益占据主流的ARM指令集作为目标系统,贯穿从流水线设计原理到软件系统仿真,再到FPGA实现等诸多环节,使自行设计的兼容ARM9指令集的CPU可以运行,内容非常精彩。本书以通俗易懂的文字详细阐述了涉及的众多相关知识,并应用这些知识进行实战设计。本书可作为高校计算机组成或体系结构课程以及微机原理课程的参考教材和实验教材。
——Xilinx大学计划经理  谢凯年
本书既有高屋建瓴的ARM内核介绍与实现,又有脚踏实地的开发工具链实战指导,基本上一册在手便可独自实践。对于没有FPGA开发基础知识的初学者,可以从Verilog编程开始,首先掌握RTL语言设计和ModelSim仿真,这基本具备了从业人员的必要技能;其次通过学习ARM体系结构,读者可以亲自动手编写仅有1800行的精简ARM内核,这相当于拥有了具体产品的设计经验;再次通过综合和布局布线,在FPGA上完成硬件实现;最后利用嵌入式开发工具移植操作系统、撰写软件代码,实现一个软硬件协同工作的SoC系统。如此完整的设计流程,即使是工作多年的从业人员也未必有机会能够在实践中一一体验,而广大读者通过阅读本书,就能轻松享受这一过程。
——socvista社区站长,资深IC设计工程师  Kobe
这是一本关于Arduino及其开发方法的书。本书内容涵盖广泛,但又不失重点。本书是扎实的功底、宽阔的眼界、不灭的激情和浓厚兴趣凝聚而成的精品。作者驾轻就熟地引领读者探讨当今最流行的ARM处理器的结构与设计,而不是简单的ARM处理器的应用;通过组合一系列FREE软件工具链,指导独立设计者进入更深的设计范畴:设计和测试一个流行的ARM处理器,并让它在主流低成本FPGA平台上运行,而且还为它装备了一个嵌入式操作系统。本书通过一个完整而简洁的流程,带领读者穿梭于IC与IT之间。推荐电子、计算机、微电子等专业的高年级本科生和研究生将本书作为辅导用书,本书可以让读者通过专业水准的实践环节迅速提升对已有专业知识的认识并融会贯通。
——Digilent中国公司总经理  赵峰
前:
这是一本介绍如何使用Verilog进行FPGA开发的图书。学习完本书,读者可自行设计一个兼容ARM9的32位RISC架构处理器。
本书从介绍Verilog RTL的开发基础开始,从零开始进行设计建模,使得初学者能够依照本书设计一个高性能的处理器内核。同时读者还能在学习处理器内核开发的过程中,切实掌握在FPGA上进行SoC设计的技能。
在ARM9处理器的运用领域,离不开操作系统的支持,特别是Linux操作系统。本书通过两个实例深入探讨了Linux操作系统在兼容ARM9处理器内核上的运行情况。第一个实例是不带MMU的uClinux操作系统,它在各种单片机中广泛运用,本书将带领读者在Modelsim仿真器上运用兼容ARM9处理器的内核来启动uClinux操作系统。第二个实例是带MMU的Linux操作系统,它应用复杂,是真正意义上的嵌入式开发的灵魂,同时介绍了其在Modelsim仿真器中如何启动。通过学习这两个RTL仿真流程,读者不仅可以清楚掌握兼容ARM9处理器内核,而且还可以清晰了解嵌入式领域中的操作系统与处理器内核的关系。  


李新兵  资深芯片设计数字电路工程师,长期专注于数字集成电路设计,并在FPGA原型验证上积累了大量的经验。一直以提升中国处理器设计能力为己任,是开源处理器的实践者和推动者。2009年年初在Socvista社区上发布了兼容ARM7的FreeARM7 IP核,一经推出就深受网友追捧,每次帖子上线,都能吸引成千上万的点击量和回复。FreeARM7开源项目从在开源硬件社区(www.openhw.org)上发布开始,就一直盘踞优秀推荐项目的第一位。在RT-Tread嵌入式社区(www.rt-thread.org)中,FreeARM7项目也深受嵌入式开发者追捧。FreeARM7 IP核已经被某信息工程学院教师用于课题研究。本书作者熟谙数字电路设计理论与方法,在长期的设计实践中,摸索总结出了一套设计RISC处理器的简易方法,可以使用较简短的代码实现复杂处理器设计。基于这些设计方法与技巧,作者在FPGA上实现并运行了兼容主流32位处理器的实现,如ARM9、cortex-m0、MIPS等RISC处理器。

图书前言

这是一本描述如何使用硬件描述语言Verilog进行FPGA设计的参考书。按照本书的指导,读者可以设计一个32位的RISC架构处理器—兼容市面上流行的ARM9微处理器。读者在完成RTL编程后,可以在购买的FPGA开发板上运行ARM9兼容的嵌入式程序。
  使用Verilog HDL进行编程到底属于硬件设计还是软件设计?这是一个很难回答的问题。它处于传统的硬件设计和软件设计的交叉点:描述的对象是硬件,但采用的方法和软件设计类似。市面上充斥着各种介绍Verilog HDL设计的书,但都是以介绍Verilog HDL的语法为主,兼而给出一些简单逻辑的Verilog RTL描述。但没有一本书介绍如何使用这种精简的语言进行成熟作品的设计,本书填补了这方面的空白。
  一个成功的RTL设计将是价值连城的,譬如ARM公司的系列处理器内核,它们都是采用Verilog等硬件描述语言进行描述设计的,用户如果想使用这些处理器内核,将需要付出昂贵的授权费用。正因为设计出成熟的RTL作品非常难,因此很多书籍对此回避,或者大而化之。好比我们在市面上看到的旅游指南书,都是连篇累牍地介绍该国的地理概貌、风土人情,以及各种介绍数据;但是这样的书籍并不受读者欢迎,而那些由旅游者介绍的各种攻略,由于有旅游者的现身说法,使人读了以后有种身临其境的感觉,受到了读者的热捧。本书尝试做一个Verilog RTL设计攻略的尝试,以流行的RISC处理器为目标,向读者传授编写Verilog程序的第一手的经验和体会。
  正因为设计出成熟的RTL程序比较难,很多公司的诸位同仁虽然口头上大力宣扬“创新”的重要性,同他交谈简直是口不离“创新”,言不离“变化”,但如果真的要他稍微改改样儿,则反而会认为非常不稳妥。指原因很简单,所谓创新,所谓变化,初期总是不稳定的,总是没有受到时间检验的,能够直接“盈利”的项目是不会稍稍“改样”来做检验创新的实验品的。于是,我们的创新要成长为众人接受的稳态的变化,需要走很长很长的一段路。幸而,在FPGA设计上,可以接受这种创新、这种变化。因为FPGA是可以不断重复可编程的,如同我们练习毛笔字的那种蘸水写的字帖,练完后,等字迹一干,下次再练不受任何影响。也就是说,读者只需要一块FPGA开发板,加上掌握了一定的Verilog RTL设计技巧,你也就和进行最高端的处理器设计的公司,比如ARM、MIPS等公司站在同一条起跑线上,他们能做的,你也能做。
  处理器设计在我们眼里之所以是那么高不可攀,原因就在于这只是为少数公司所掌握的,并不是为大众所能够掌握的技能。对于RISC处理器,我们都知道三级流水线、五级流水线,但都没有一个生动的例子来显示这三级流水线是如何工作的,是如何协调数据、指令的关系。也许有这样的开源的32位的RISC处理器设计,但都非常复杂,读者要弄懂它们,要花费大量的工夫。而且,市面上最主流的处理器是ARM公司推出的一系列RISC处理器,读者对它们的架构与指令集都有所了解。基于此,作者针对ARM9的指令集与架构,介绍Verilog RTL设计,以便读者了解处理器设计的架构,能够在FPGA上真正运行一个32位的RISC处理器。
  对于FPGA设计,最重要的是能够在开发板中运行起来。开源的32位RISC处理器开发出来了,它最大的功效是能够帮助FPGA设计者在实际中应用,而不是成为一个展览品,供大家解剖学习。对于本书开发的兼容ARM9微处理器,全部的Verilog RTL描述只有不到1800行代码,存放在一个文件当中。FPGA设计者只需明白设计的I/O接口,即可例化在设计者的设计当中,可以最大化地方便设计者。同时,由于ARM9的开发工具众多,相关的嵌入式软件设计人员也占据了主流,因此,在嵌入式软件资源方面,兼容ARM9处理器的应用会受到这些因素支持。读者在本书中得到了兼容ARM9处理器的Verilog RTL设计后,可以在网络资源以及从事嵌入式软件开发的朋友中得到支持,以在FPGA设计应用中,真正实现完全自我掌握的SoC设计。
  长久以来,我国的处理器设计水平落后于欧美国家。虽然龙芯在基于MIPS的架构上有所突破,但在更加流行的ARM架构上鲜有建树。众所周知,以Intel为代表的CISC处理器设计所采用的技术高深,设计过程复杂,在后面的追赶者望尘莫及。有些人在看到Intel的高科技设计水平后,自叹弗如,于是对其他人在处理器上的追赶嗤之以鼻。这就好比看见西方人吃西餐礼节繁琐、堂而皇之,于是自惭形秽,觉得还不如不吃饭了。殊不知吃饭不仅有西餐的吃法,而且还有快餐式的KFC、麦当劳式的吃法。ARM和MIPS就好比饮食界的肯德基与麦当劳。他们为业界提供了RISC架构的处理器,这些处理器都是采用硬件可综合语言编写而成的,易于其他芯片设计公司集成。这种设计方式生产简便、灵活快速,深受其他芯片设计公司欢迎。这就好比快餐式的做法,业界一致摒弃了Intel这种西餐式的吃法。读者如果有志于在处理器设计方面进行突破,那么掌握Verilog RTL的设计技巧,对处理器进行钻研,一定会有所拓展。
  本书以Verilog RTL设计为核心,从第1章建立Verilog RTL设计模型开始,到最后一章能够对Linux操作系统进行仿真。读者通过本书可以切实掌握到基于ARM9的数字电路设计流程,并能够利用成熟的MCU软件设计工具生成BIN文件,通过BIN文件和一个只有1800行代码的兼容ARM9处理器内核,读者能够快速完成FPGA设计。
  第1章的主要目的是建立Verilog RTL设计的模型。我们知道,进行Verilog RTL设计,必须先具有基本的硬件思维,使得在编写软件式的Verilog代码时,能够时时刻刻警惕自己写的每一行代码都会对应着实体逻辑。这一章会对数字电路的基本模型进行梳理,在这个基础上,我们才能进行复杂逻辑的组织与设计。
  第2章基于第1章建立的基本模型,采用硬件模型,使用Verilog语言进行基本的电路设计。首先,分析了Verilog这种硬件描述语言的语言特点。它是一种非常类似C的编程语言。针对RTL设计,它只有寥寥的几种格式。正如我们手机上的笔画输入法,正是这三四种格式,经过组合变换,可以写出各种各样复杂的逻辑。在掌握了Verilog RTL的语言特点后,这一章将带领读者进行串口通信的设计。串口通信涉及串行收发数据,是硬件设计中离不开的调试接口。通过该章建立的设计理念,只需寥寥几十行代码就可以设计一个高效的Verilog RTL程序。
  第3章介绍了Modelsim仿真。Verilog RTL设计第一步的检验是进行仿真。该章建立了仿真的基本流程。读者可以通过编写task函数来定制激励,比如在对UART串口进行仿真时,可以通过一个task函数把并行数据串行发送到RTL设计的输入端口上。
  第4章介绍了FPGA及FPGA开发板。FPGA是一种奇妙的芯片,它可以模拟各种数字电路的功能—只要我们按照RTL的规则编写了数字电路,FPGA就能很快成为这种功能的芯片。单独的FPGA就如同人的大脑,但如果离开了手臂、腿脚以及眼耳鼻舌等,那再聪明的大脑也不会有所作为。以FPGA为核心的FPGA开发板就如同人脑和人身体结合在一起一样,在我们编写的程序的指导下,FPGA开发板可以实现各种特定的功能。但如果再进一步,把32位的RISC处理器放置于FPGA内部,那么我们指挥“FPGA”的效率就会进一步提高。该章除了对FPGA和FPGA开发板介绍以外,还通过具体的串口通信例子,零实践指导读者对FPGA开发板进行了解。
  第5章着重介绍了ARM9TDMI这种曾经风靡一时,现在仍发挥着巨大作用的处理器架构。ARM9的嵌入式开发人员应该对ARM9的编程模型了如指掌,特别是系统设计工程师,必须熟悉汇编级的应用,才能对系统进行调试。该章将从设计的角度对微处理器的中断和指令集进行解读。我们看到的介绍ARM9的指令集都是从一条条的汇编指令的角度入手的,但是本书通过指令集的各种指令的结构把它们总结成了20类指令。于是,对第6章提出了一个课题:如何在一个.v文件内实现20条指令和7种中断。
  第6章是本书的核心,它将结合之前章节讲述的知识点,共同呈现出这只有1800行的ARM9微处理器代码。从RTL的角度看,它是由一条条关于寄存器和组合逻辑的描述组成的;从ARM9的编程模型的角度看,它必须实现ARM9架构的20条指令和7种中断;从处理器流水线的角度来看,它必须在三级执行、五级执行之间进行折中;从FPGA执行的角度来看,它必须适应FPGA的结构,在时序和面积之间折中。可以说,Verilog RTL编程就如同带着镣铐的舞蹈,在受到种种约束的情况下,还要跳出优美的舞蹈。该章将以简为纲,尽量把复杂的东西通过简洁的描述呈现给读者。让读者不仅能够理解它,而且在使用时,也能够很轻易地融入到自己的设计中。
  第7章介绍了兼容ARM9处理器内核运行的第一个程序—Hello World。在学习C语言时,学习的第一个程序就是输出Hello World。在做好了一个兼容ARM9的处理器设计后,最美妙的事莫过于在开发板中通过串口同样通过C语言描述输出Hello World。现在看看我们具有的元素:FPGA开发板、串口、处理器内核,只要我们通过ARM公司自家流行的RealView MDK以任意一款流行的ARM9 MCU为原型,就可以编写出BIN文件。这些BIN文件在例化入FPGA内的ROM后,它就从死的状态变成活跃的了。我们将看到,这些代码指挥FPGA通过串口输出任何字符串。这一简单的例子将使大家享受到SoC设计带来的乐趣,在以后的FPGA设计中可以尽量使用处理器来简化繁琐的设计流程。
  第8章介绍了兼容ARM9处理器内核性能测试—Dhrystone Benchmark。我们知道了处理器的功效,但还不知道这款兼容ARM9的微处理器内核的性能如何。本章将延续第7章的SoC设计流程,对这款处理器内核进行体检,以便获得关于它的第一手资料。经过该章的测试后,我们发现,这款兼容处理器内核可以达到1.2 DMIPS/MHz。
  第9章介绍了uClinux仿真—结合SkyEye,启动不带MMU的操作系统。有了FPGA和处理器内核的结合,本书将具有另外一个主旨,那就是把操作系统引入设计当中。SkyEye作为一款软件模拟处理器的工具,它可以作为我们这款内核的标尺,衡量它运行现代流行操作系统的能力。操作系统虽然复杂,但我们同样可以通过编写一个简单的testbench的方式,结合1800行代码构成的处理器内核,让这款操作系统也能在Modelsim中运行。经过仿真,可以看到,它可以输出同SkyEye同样的log信息。硬件工程师通过该章同样可以了解到MCU的构成。
  第10章介绍了Linux操作系统—结合mini2440开发板,启动带MMU的嵌入式操作系统。在该章中,读者可以看到开发ARM9兼容处理器内核的优势:它能够得到的帮助实在是太多了。我们不仅有软件模拟器,而且还有市面上极为流行的ARM9开发板。通过开发板,我们可以看到Linux操作系统启动起来,现在,通过编写一个tb文件,我们同样能够在Modelsim中再现ARM9处理器是如何启动Linux操作系统的。本书不同于其他只是介绍性质的书籍,通过实际的仿真步骤,我们能够清晰地理解Linux操作系统是如何与处理器内核结合在一起的。
  最后,本书附录提供了带有注释的兼容ARM9处理器内核的Verilog RTL描述。读者可以在这1800行的代码中体会Verilog RTL编程的巧妙之处,以便融会贯通,应用在自己的设计当中。如果能够在设计中应用这款处理器内核,那将是笔者最大的欣慰。
  受笔者的学习领域及专业程度,本书并不能完全涵盖ARM9处理器这个软硬件结合的领域,再加上编写时间仓促,在书中如有错漏之处,请读者不吝赐教。如能对诸位有些许启发之处,能够吸引更多的人参与FPGA上的处理器设计,那么作者的目的也就达到了。

李新兵
2012年3月

上架指导

电子与电气工程

封底文字

放排好后的目录

作者简介

李新兵 著:暂无简介

图书目录

前言
第 1 章  数字电路设计模型 1
主要讲述数字电路设计的基本模型。在进行数字电路设计之前,必须建立一个数字电路模型。这个建模的过程就是在心中建立一个电路的基本轮廓。在了解了数字电路的基本单元后,可以运用它们构建大致模型。
1.1  最初的模型—带有输入输出的模块 1
1.2  组合逻辑 2
1.3  时序逻辑 3
1.4  同步电路 5
1.5  同步电路时序路径 6
1.6  RTL描述 8
1.7  综合生成电路 9
结束语 10
第 2 章  Verilog RTL编程 11
主要讲述如何使用Verilog进行RTL编程,讲述如何精炼地使用Verilog进行RTL描述。在对Verilog的描述方法进行了基本归类后,总结了进行RTL设计的基本流程,并在最后使用一个简单的UART串口设计实例来启发读者完成RTL设计。
2.1  Verilog语言与RTL描述 11
2.2  Verilog描述语句对应电路 13
2.3  如何进行RTL设计 16
2.4  RTL设计要点 17
2.5  UART串口通信设计实例 18
结束语 25
第 3 章  Modelsim仿真 26
主要讲述如何使用Modelsim对Verilog RTL设计进行仿真验证。验证是设计中重要的一步,Modelsim是最流行的仿真工具,使用Modelsim建立一个测试环境可以对RTL设计进行各种级别的验证测试。
3.1  仿真的意义 26
3.2  testbench文件 27
3.3  Modelsim仿真工具 28
3.4  UART串口仿真实例 32
结束语 34
第 4 章  FPGA开发板原型验证 35
主要讲述如何使用FPGA开发板对设计进行原型验证。FPGA开发板作为数字设计运行的实体,具有实践出真理的价值。掌握FPGA开发板对设计进行验证,对于设计者无比重要。
4.1  FPGA内部结构 35
4.2  FPGA开发板 41
4.3  FPGA设计开发流程 43
4.4  FPGA设计内部单元 46
4.5  UART设计在Altera FPGA的下载执行 53
4.6  UART设计在Xilinx FPGA的下载执行 61
结束语 77
第 5 章  ARM9微处理器编程模型 78
主要介绍ARM9处理器架构,使读者对ARMv4这一套运行在众多智能手机上的流行架构有个切实的了解。该章从建立微处理器的基本模型开始,从实现的角度对ARMv4架构的方方面面进行了探讨。在总结出了7种中断和20条指令后,为下一章的执行做了全面的总结和铺垫。
5.1  ARM公司历史 78
5.2  ARM处理器架构 79
5.3  微处理器基本模型 81
5.4  ARMv4架构模式 84
5.5  ARMv4架构内部寄存器 86
5.6  ARMv4架构的异常中断 89
5.7  ARMv4架构支持的ARM指令集 95
5.8  ARM指令与中断分析 117
结束语 119
第 6 章  兼容ARM9微处理器Verilog RTL设计 120
该章是本书的核心。讲述了如何在不到1800行代码的Verilog程序里实现第5章总结的ARMv4架构。从经典的三级流水线和五级流水线开始,全面介绍了如何有效地实现处理器。以此为基础,逐步对兼容ARM9微处理器进行剖析,让读者从处理器内核的实现过程中,学习到Verilog RTL设计的各种技巧。
6.1  确定RTL设计的输入输出端口 121
6.2  经典的三级流水线架构 125
6.3  经典的五级流水线架构 128
6.4  三级流水线改进架构 130
6.5  适于兼容ARM9微处理器的三级架构 134
6.6  影响流水线架构执行的四种状况 139
6.7  第一级:取指阶段的Verilog RTL实现 151
6.8  第二级:乘法运算阶段的Verilog RTL实现 152
6.9  第三级:加法运算阶段的Verilog RTL实现 159
6.10  寄存器组的写入 168
6.11  CPSR/SPSR的写入 176
6.12  数据池的读写 185
6.13  第四级:读操作数据的回写 187
结束语 191
第 7 章  Hello World—兼容ARM9处理器内核运行的第一个程序 192
主要介绍简单的ROM代码生成流程,并让它在兼容ARM9处理器内核上运行。Keil是嵌入式开发中流行的工具,它的后续RealView MDK也因为其良好的特性受到嵌入式设计工程师的欢迎。该章帮助读者编写简单的Hello World程序,以此为契机,建立简单的SoC设计工程。
7.1  基于FPGA的SoC设计流程 193
7.2  使用RealView MDK编译Hello World程序 197
7.3  Modelsim仿真输出Hello World 206
7.4  建立Hello World的FPGA设计工程 213
结束语 226
第 8 章  Dhrystone Benchmark—兼容ARM9处理器内核性能测试 227
Dhrystone Benchmark是为各种嵌入式内核测试“体质”的代码。该章结合ARM公司给出的优化方法,使用RealView MDK对Dhrystone 2.1代码进行编译。然后使用Modelsim进行仿真,并用FPGA开发板结合串口,输出真实的测试结果。
8.1  Dhrystone 2.1介绍 228
8.2  移植Dhrystone 2.1进行编译 232
8.3  使用Modelsim仿真运行Dhrystone Benchmark 238
8.4  在线可编程的FPGA SoC设计工程 245
8.5  Dhrystone Benchmark在开发板中运行 254
结束语 258
第 9 章  uClinux仿真—结合SkyEye,启动不带MMU的操作系统 259
SkyEye是ARM9处理器的软件模拟器,通过它解析uClinux内核,可以在软件平台上运行嵌入式软件。本章建立了Modelsim的仿真环境,加载同样的uClinux内核,可以输出同SkyEye一样的启动信息。在这个过程中,用户可以通过查看波形,从RTL设计工程师的角度解析嵌入式操作系统。
9.1  ARM7TDMI-S处理器内核 260
9.2  以ARM7TDMI为核心的单片机 266
9.3  uClinux嵌入式操作系统 269
9.4  SkyEye硬件模拟平台 270
9.5  Modelsim下仿真uClinux启动过程 274
结束语 290
第10章  Linux操作系统仿真—结合mini2440开发板,启动带MMU的操作系统 291
Mini2440 ARM9开发板是一种流行的嵌入式开发工具。该章从开发板中得到含有操作系统及文件系统的NAND Flash的镜像,然后在Modelsim下建立testbench环境,从该镜像中读出bootloader的第一条指令开始,一步步地启动Linux操作系统。这个过程涉及带MMU功能模块的处理器的工作机理,读者在该章中可以了解到Linux操作系统的硬件工作环境。
10.1  ARM920T处理器内核 291
10.2  S3C2440A 32位微控制器 296
10.3  mini2440 ARM9开发板 298
10.4  NAND Flash仿真模型 301
10.5  为兼容ARM9处理器内核增加协处理器指令 303
10.6  建立仿真Linux操作系统的testbench 305
结束语 318
附录A  启动Linux操作系统的全部打印log信息 320
附录B  兼容ARM9处理器内核带注释的Verilog RTL代码 329
附录C  相关网址 389

教学资源推荐
作者: 王伟 屠幼萍 编著
作者: 劳五一 王淑仙 金传榆 编著
作者: Nannapaneni Narayana Rao
作者: (美)Stanley G.Burns Paul R.Bond
参考读物推荐
作者: 映时科技 董晓 任保宏 著
作者: 王电令 苏亚辉 苏彩红 编著
作者: [新加坡]贾甘纳坦·坎尼亚(Jagannathan Kanniah),M.菲克雷特·埃尔坎(M. Fikret Ercan),卡洛斯A.阿科斯塔·卡尔德隆(Carlos A. Acosta Calderon)著
作者: 沈金鑫 编著