兼容ARM9的软核处理器设计(首本在FPGA上实现兼容ARM9指令集处理器设计的书)

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




         这是一本描述如何使用硬件描述语言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编程的巧妙之处,以便融会贯通,应用在自己的设计当中。如果能够在设计中应用这款处理器内核,那将是笔者最大的欣慰。

(5个打分, 平均:4.80 / 5)

雁过留声

“兼容ARM9的软核处理器设计(首本在FPGA上实现兼容ARM9指令集处理器设计的书)”有25个回复

  1. evilforce 于 2012-05-03 5:56 下午

    如果真像描述的那样,对于想学习芯片设计的人来说是否是个好消息?作为一个软件人员,以前一直想学硬件芯片相关的,但是总是不得其法。有经验的前辈请评论下。。

  2. boox 于 2012-05-03 8:06 下午

    买书送FPGA开发板么?

  3. 2b青年. 于 2012-05-03 9:07 下午

    是啊, 整了6年内核和编译器,现在想往下走学芯片设计(兴趣,非工作需要). 计算机方面的书,国内的都比较垃圾,不敢看. 有经验的前辈点评下这书,或者推荐一本更好的.

  4. Ns 于 2012-05-03 9:30 下午

    可以說明一下你之前的學習方法嘛
    方便我給意見

  5. Yuhao 于 2012-05-03 10:32 下午

    要学处理器设计还是从gate level开始写才能真正学到东西。另外如果做x86的ISA,学到的更多,以后写任何RISC都不在话下。可以看看这个。http://users.ece.utexas.edu/~patt/12s.382N/problemset/project/descrip.html

  6. h 于 2012-05-04 4:17 上午

    Opencore 曾经有,但是被ARM公司要求下架了

  7. aaabbb 于 2012-05-04 4:45 上午

    读了一遍Linux Kernel源代码,就觉得自己能脚踏微软,独步天下了?就是真能从头开发一个Window8+ office8, 卖得掉么?

  8. none 于 2012-05-04 6:03 上午

    这种尝试还是有益的,学习东西紧密结合应用。只是高校课程的学习周期太短,这样的学习内容,恐怕不容易在一两个短学期内领会。而工作人员的话,又没有系统的时间去进行这样的实际编码。作品的处境有点尴尬,但是里面的部分章节定然能提供良好的参考。(我楼上说的什么意思啊?)

  9. huanghuihuang 于 2012-05-04 7:09 上午

    这书有机会要看一下。

  10. 哈哈 于 2012-05-04 9:12 上午

    5楼推荐本好书.

  11. hh 于 2012-05-04 5:22 下午

    求三楼经验.

  12. 2b青年 于 2012-05-04 8:36 下午

    谈不上经验,本来就是个菜鸟. 看看首席的文章
    <>.
    搞了好些年内核,觉得不过瘾,然后想看编译器怎么工作的,自己模仿写了个简单的,然后狂喜欢汇编写代码. 现在开始对更下面的有兴趣了 .. 觉得不懂硬件,其实就是在用计算机,算不上搞.
    菜鸟一个,喜欢而已.

  13. free-arm 于 2012-05-05 7:00 上午

    希望能成为学习处理器设计的起步之书。本书介绍的软核处理器设计简单,全面兼容ARM9的各种开发软件,适于在FPGA开发板上运行ARM9的程序。

    有购买书的读者可以在:http://code.google.com/p/risclite上下载各章对应的设计文件。有FPGA开发板的可以在板上运行各种嵌入式程序;没有开发板的也没关系,运用Modelsim、iVerilog等仿真软件,一样可以把ARM9的程序运行起来。

  14. 哈哈 于 2012-05-05 2:09 下午

    5楼出来回答下,又好书推荐吗? 最好国外的教材,方便买的.

  15. xxx 于 2012-05-05 3:25 下午

    想不到什么适合自学的书。而且最重要的是自己实践,写模拟器或者gate level的设计。一定要说书的话,入门的可以先看这个(http://highered.mcgraw-hill.com/sites/0072467509/) 然后再看Patterson&Hennessy的Computer Organization。两本书都一定要做书上的Lab,光看不做假把式。这两本书搞定,fundamentals就都有了,然后就看兴趣了。Fundamentals, fundamentals, fundamentals…

  16. rodney 于 2012-05-05 7:11 下午

    7楼吹牛逼啊

  17. sailing 于 2012-05-06 2:34 上午

    也说几句Verilog吧。我看过很多国内微电子系的Verilog教材,结果是很无奈的。
    我最早做设计的时候是画图,之后切换到Verilog。所以每一个行为级的描述,都可以与图对应。
    国内的教材直接就将行为级的,这样的结果是学生们入门很快,也很容易知其然不知其所以然。
    现在让学生们或者Verilog新入门的人直接画图已经不可能了,但是Yuhao说的,从Gate-Level开始做起是对的。
    学一个东西本没有什么捷径的。起初的捷径很容易转化为将来的代价。
    有时真的想写本Verilog的入门书,而不是几千行代码描述一个处理器微架构。即便是描述一个8位单片机怕也不够。因为没有捷径。还是老老实实一步一步从头做起,从基础做起,这样才是最快的。

  18. 一条虫 于 2012-05-06 4:44 上午

    楼上一语道破。。我以前学VHDL时,总是在纠结这玩意究竟最后生成的是神马东西。。哈哈。

  19. tpu 于 2012-05-06 5:39 上午

    确实,如果你知道自己的RTL在FPGA底层大概是什么样子,你就出师了.

  20. xxx 于 2012-05-06 11:28 上午

    http://www.amazon.cn/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%8E%9F%E7%90%86%E4%B8%8E%E8%AE%BE%E8%AE%A1-Verilog-HDL%E7%89%88-%E6%9D%8E%E4%BA%9A%E6%B0%91/dp/B005G11B42 我推荐这本书。我上过李亚民老师的短期课程,这本书是从gate-level开始搭一个RISC CPU,从最简单的component开始一步步搭。

  21. evilforce 于 2012-05-06 6:16 下午

    果然弯曲的评论是最有价值的。基础很重要,还有要动手机会。我虽然工作和FPGA驱动相关,却总是没法往前走一步,还是自己不够毅力。。

  22. sailing 于 2012-05-06 6:17 下午

    xxx推荐的是好书。我读过。
    不过我还是不建议在这个帖子上继续说了,我也不建议大家接着评论。我建议可以另起话题。

    我没有读过《兼容ARM9的软核处理器设计》这本书,那天到书店看看。写本书非常不容易,我会去拜读这本书。

  23. 哈哈 于 2012-05-06 9:11 下午

    哥是搞软件的,不懂硬件,读过<> 第四章, 讲了怎么设计一个小CPU的.
    很受启发.想接着深入.
    xxx推荐的这本好书,跟这个第四章很像啊。

    第四章, 书中的作者也推荐了2本书, 现代逻辑设计 (katz)和那本著名的 斯坦福校长写的那本 计算机体系结构量化的。

    咋不在继续讨论这个话题了,国内的兄弟们写个书不容易,不能断人财路。支持下!

  24. 路人 于 2012-07-12 10:28 下午

    23楼的哈哈,请问您读过的到底是谁的大作啊?

  25. abhong 于 2012-07-23 2:46 上午

    从一个天天写HDL代码的读者角度,非常推荐此书!几乎可以从数字电路的根上理解当前的计算机技术,而且此书的写作逻辑和内容非常实用。对于我这类理解IC设计但不太懂软件开发的读者一样受益匪浅。