- 8051软核处理器设计实战
- 李新兵
- 1969字
- 2023-03-13 17:13:11
前言
虽然目前FPGA设计的发展如火如荼,但仍被嵌入式设计压过一头。具体原因有很多,究其主要原因,在于MCU的价格低廉、容易普及,而设计者又不用担心设计的某些程序bug,反正MCU可以反复擦写、存储空间又充足,即使有了bug也决不会成为毁灭性的。实际上,FPGA也有这种反复擦写的优势,但它的单品价格不菲,因此,与MCU主打的嵌入式设计比起来,实在缺乏竞争力。
价格影响产品的普及。细察嵌入式开发者和FPGA开发者,就会发现嵌入式开发者胆气冲天,一个人就能拿捏住整个系统,什么音乐、网络,搞得风生水起,有声有色。但此种现象在FPGA开发者身上极其罕见。大多数FPGA开发者都只是“方面大员”,在各自的领域内固然是见微知著,但一旦超出他的领域,那就四顾茫然了。
作者一直存在一个想法,那就是引嵌入式开发的“灵气”入FPGA设计的“一团死水”中,激活FPGA开发者的豪气,也让FPGA设计能够变得与嵌入式设计一样有声有色。存在这种想法的不仅是作者,而且还包括FPGA领域的“大鳄”——Xilinx。Xilinx公司联合ARM公司推出带有Cortex-A9硬核的FPGA,也就是想让嵌入式设计与FPGA设计做到融合,互帮互助,从而实现设计的一体化。于是这种特殊类型的FPGA——ZYNQ系列成了Xilinx公司的主打宣传产品。在相关技术论坛上,由于Xilinx不遗余力地大推特推,ZYNQ已经变得耳熟能详了。但是,对于设计者而言,ZYNQ只是“看起来很美”。
至少对于个人开发者来说,能真正玩转ZYNQ不仅需要开发者有高超的FPGA设计经验,而且还要有能让Cortex-A9正常运转的嵌入式开发经验。这对于普通开发者来说是一个了不起的挑战。如果是一个团队,甲负责FPGA设计,乙负责Cortex-A9开发,两人通过沟通、合作、同心协力,或许能够让嵌入式和FPGA两者互相补充,并发挥最大效能。但对于普通开发者来说,则绝无这种左、右手同时担当两方面工作的能力。因此,对于普通开发人员来说,在CPU方面,没有必要采用那么高端的配置。
采用最普通的Verilog语言写一个CPU软核是不错的主意。在这本书之前,作者曾编写了《兼容ARM9的软核处理器设计:基于FPGA》,让众位FPGA开发者能够用到与ARM9功能相当的32位CPU处理器。但通过和几位读者沟通了解到:从FPGA设计上来理解软核处理器的运作没有问题,但32位处理器的嵌入式设计、使用开发工具生成程序并让软核处理器充分运作起来,这对于他们而言则太难了,因为这是个跨领域的课题。为了解决这个问题,作者产生了编写本书的想法。
8051架构流传久远,对于嵌入式开发者来说,他们非常熟悉相关的工具和流程,但由于它的指令众多、实现复杂,对于FPGA设计者来说,这是一个很好的挑战课题。作者继ARM9软核处理器设计之后又推出8051架构的软核处理器设计,这套系统相对于ARM9来说更加简单,可以吸引更多FPGA的入门开发者,并使其通过学习软核处理器设计(不仅学习设计技巧,而且最终能将所学知识用在今后的开发上)打通嵌入式开发和FPGA设计上的“任督二脉”。
本书首先对8051架构做了详细介绍,并对它的各种器件做了取舍。8051毕竟是一种独立运行的单片机,因此它包含了必要的定时器、串口等。但作为一个可以在不同环境下调用的8051软核处理器,可让使用者根据自己的需要对它添加元件。因此,简单的定时器和串口并不需要包括在软核处理器之中,使用者完全可以根据自己的需要来添加它们。
对于8051的111条指令,单个看起来每一条都很简单,然而数目众多,作者分类介绍它们用了不少篇幅,但运用Verilog设计技巧却能在700行左右的代码文件中详尽表达它们。采用精简的Verilog描述来描述复杂的系统是作者带给读者的设计艺术。通过了解这种设计艺术,读者能够加深对Verilog设计的领悟。因此,在讲述完8051的架构后,作者对Verilog的基本知识也做了介绍,让读者在学习设计技巧之前,能够先了解这些基本知识。
重点是如何采用Verilog语言来实现这111条指令,本书也对此做了介绍。软核处理器作为吞吐指令的“装置”,它对源源不断的指令进行精确而迅速的解析。由于指令繁多,这对资源整合提出了挑战,很多同行都在这个问题上束手无策。但其实处理这类问题的策略古人早就教给我们了。最通俗的比喻就是折筷子,若给你111根筷子,让你一把折断,这当然是比较费力的,但如果一根一根地折断,那就容易多了。这个策略很多人都懂,但真要做起来,却会走样变形。问题是首先得把这111条指令变成如同每根筷子一样的不同的“小麻烦”,而不是集合在一起,成为“大麻烦”。因此,在进行Verilog设计前,需奠定好软核处理器主程序架构的基础,如千手观音,首先塑起无手的观音,然后,一只一只地逐步添加上所有的手。本书在奠定基础上有独到之处,值得读者借鉴。
在FPGA设计上有一个好的思维模式并不太难,难在坚持这个思维模式并使之完备成熟。为此,作者准备了与Keil这个流行的8051开发工具适配的测试代码。这些代码会针对每条指令进行测试,并在最后给出测试结果。读者可以在作者的基础上对程序大胆地添加自己的想法,并用这种软件的测试程序进行检验。
目前,FPGA设计远没有达到蓝海的沙滩,它的提升空间巨大,愿与读者共勉,共同提升之。
编者
2014年10月