登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入 新註冊 | 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / EMS,時效:出貨後2-3日

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

2023年09月出版新書

2023年08月出版新書

2023年07月出版新書

2023年06月出版新書

2023年05月出版新書

2023年04月出版新書

2023年03月出版新書

2023年02月出版新書

『簡體書』8051软核处理器设计实战

書城自編碼: 2537800
分類: 簡體書→大陸圖書→計算機/網絡操作系統/系統開發
作者: 李新兵 著
國際書號(ISBN): 9787111489740
出版社: 机械工业出版社
出版日期: 2015-03-01
版次: 1 印次: 1
頁數/字數: 185/
書度/開本: 16开 釘裝: 平装

售價:NT$ 407

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
数字经济:“数字中国”顶层规划与实践路径
《 数字经济:“数字中国”顶层规划与实践路径 》

售價:NT$ 386.0
算者生存:商业分析的方法与实践
《 算者生存:商业分析的方法与实践 》

售價:NT$ 447.0
共享现实:是什么让我们成为人类
《 共享现实:是什么让我们成为人类 》

售價:NT$ 717.0
女佣异闻:乙一出道25周年纪念短篇集
《 女佣异闻:乙一出道25周年纪念短篇集 》

售價:NT$ 279.0
生活观察图鉴 中国常见鸟类观察图鉴
《 生活观察图鉴 中国常见鸟类观察图鉴 》

售價:NT$ 839.0
父亲身份:探寻血缘之谜
《 父亲身份:探寻血缘之谜 》

售價:NT$ 493.0
悠游人间 赛博朋克少女插画绘制教程
《 悠游人间 赛博朋克少女插画绘制教程 》

售價:NT$ 559.0
“李晓鹏说中华史”系列(全二册)
《 “李晓鹏说中华史”系列(全二册) 》

售價:NT$ 818.0

建議一齊購買:

+

NT$ 743
《 跟老男孩学Linux运维:Web集群实战 》
+

NT$ 1193
《 UNIX环境高级编程(英文版 第3版) 》
+

NT$ 739
《 Linux设备驱动开发详解:基于最新的Linux4.0 》
+

NT$ 988
《 iOS核心开发手册(原书第5版,世界知名iOS开发专家详细讲解创建优秀iOS移动应用程序的技术细节,阐释如何高效开发iOS程序) 》
+

NT$ 822
《 疯狂iOS讲义(上)(第2版)——Objective-C 2.0与iPhone/iPad应用开发基础(含CD光盘1张) 》
+

NT$ 801
《 Windows Server2012系统配置指南 》
編輯推薦:
《8051软核处理器设计实战》
通过8051处理器从工程的角度理解计算机组成的最佳参考书。
《兼容ARM9的软核处理器设计》一书的姊妹篇,从8051入手更简单,更精炼。
本书中作者用700行Verilog代码真正实现了一个111条指令的8051软核处理器。
帮助读者在FPGA上贯通逻辑电路和嵌入式开发,提供完整的源代码,极具可操作性。
內容簡介:
《8051软核处理器设计实战》深入浅出地介绍了基于8051的软核处理器设计。它包括8051的架构模型、111条指令的功能作用及其对应的Verilog描述,以及如何用Verilog语言构建8051软核处理器的主体程序并向其中添加8051的111条指令。本书全面详细地介绍了8051软核处理器的实现过程及其验证方法,并借助大量形象的比喻帮助读者理解。
全书共分为7章:第1章是8051架构的描述;第2章介绍8051的指令集;第3章介绍8051中断与Keil开发工具;第4章介绍Verilog硬件描述语言基础;第5章介绍如何使用Verilog语言进行设计;第6章介绍8051软核处理器设计流程;第7章介绍8051软核处理器的验证与应用。
本书编写目的是让FPGA的设计者也能够享受嵌入式开发的乐趣,让嵌入式和FPGA设计巧妙地结合起来以实现开发者更加复杂的技术设计。同时,本书可作为FPGA、8051单片机、嵌入式等开发者的工程参考书,也可以作为8051软核处理器开发者的指导用书。
關於作者:
李新兵 资深芯片设计数字电路工程师,EETOP社区处理器设计版块资深版主,长期专注于数字集成电路设计,并在FPGA原型验证上积累了大量的经验。作者一直以提升中国处理器设计能力为己任,是开源处理器的实践者和推动者。由作者设计的兼容ARM指令集的软核处理器一经在EETOP社区发布,就引起了强烈的反响。在Socvista社区上发布的兼容ARM7的FreeARM7 IP核深受网友追捧,每次帖子上线,便能吸引成千上万的点击和回复。FreeARM7开源项目从在开源硬件社区(www.openhw.org)上发布开始,就一直盘踞在优秀推荐项目的第一位至今。在RT-Tread嵌入式社区(www.rt-thread.org)里,FreeARM7项目也深受嵌入式开发者追捧。FreeARM7 IP核已经被解放军信息工程学院的教师用于课题研究。本书作者深谙数字电路设计理论与方法,在长期的设计实践中,摸索总结出了一套RISC处理器的简易设计方法,可以使用较简短的代码实现处理器设计的复杂功能。基于这些种设计技巧,作者在FPGA上实现并运行了兼容主流指令集的处理器,如ARM9、Cortex-M0、MIPS等各种RISC处理器。作者还著有《兼容ARM9的软核处理器设计:基于FPGA》一书。
目錄
前言
第1章 8051架构描述
1.1 引言
1.2 8051处理器基本模型
1.3 8051的接口
1.4 8051架构的重要硬件和性能
1.5 8051的存储器架构
1.6 8051的重要寄存器
1.7 结束语
第2章 8051的指令集
2.1 引言
2.2 8051指令集综述
2.3 指令的寻址方式
2.4 指令的分类详解
2.4.1 算术操作指令
2.4.2 逻辑操作指令
2.4.3 数据转移指令
2.4.4 布尔变量操作指令
2.4.5 程序跳转指令
2.5 指令执行对PSW的影响
2.6 结束语
第3章 8051中断与Keil开发工具
3.1 引言
3.2 Keil软件概览
3.3 设计工程初探
3.4 Keil工程的配置与输出
3.5 新建工程与调试
3.6 8051中断与中断程序编写
3.7 结束语
第4章 Verilog硬件描述语言基础
4.1 引言
4.2 简单RTL设计
4.3 基本语法要素
4.4 数据类型
4.4.1 基本数值
4.4.2 数据类型?
4.4.3 数据类型:vari
4.4.4 参数:parameter和localp
4.5 表达式
4.5.1 操作数
4.5.2 操作符
4.6 赋值语句
4.6.1 连续赋值语句
4.6.2 过程赋值语句
4.6.3 过程连续赋值语句
4.7 块语句
4.7.1 begin…end与fork…join语句
4.7.2 条件控制语句
4.7.3 case语句
4.7.4 循环语句
4.8 task和function语句
4.9 时间控制
4.1 0层次化架构
4.1 1结束语
第5章 如何使用Verilog语言进行设计
5.1 引言
5.2 Verilog RTL的基本格式
5.2.1 组合逻辑电路描述
5.2.2 时序逻辑电路描述
5.3 Verilog RTL的描述方法
5.4 结束语
第6章 8051软核处理器设计流程
6.1 引言
6.2 8051软核处理器的接口信号
6.3 8051软核处理器的基本架构
6.4 软核处理器基本函数定义
6.5 软核处理器主体程序解读
6.6 算术操作指令的添加
6.7 逻辑操作指令的添加
6.8 数据转移指令的添加
6.9 布尔变量操作指令的添加
6.10 程序跳转指令的添加
6.11 结束语
第7章 8051软核处理器的验证与应用
7.1 引言
7.2 8051软核处理器的验证
7.3 8051软核处理器的应用
7.4 结束语
內容試閱
第1章
8051架构描述
1.1 引言
8051是最流行的CPU。8051兴起于20世纪80年代,由intel开创。当然,现在intel已经不再理会这种低端的8位CPU,它主打的是通用处理器,也就是我们电脑上用的那种。因此,8051的架构不像ARM架构一样有专利的困扰,各位可以放心地将其应用在各自的项目当中。
8051和它的“后辈们”——x86的各种高端处理器相比,其优点是功能简单、架构单一。因此由8051这种8位处理器形成的MCU占据了单片机市场的主流。就算ARM公司费尽心机开发出各种小面积、高性能的处理器内核,它们也无法取代8051在开发者心目中的地位,原因在于8051处理器优越的性能。
本章将带领诸位去领略这款经典8位处理器的架构,让我们从架构这一方面了解它的优异性。
本书的目的是在FPGA上开发兼容8051的软核处理器。因此在开发之前,我们必须对它的架构非常熟悉。在探讨之前,必须明确一点,在FPGA上设计兼容8051的软核处理器到底应该设计到什么程度?笔者在上一本关于处理器设计的书《兼容ARM9的软核处理器设计:基于FPGA》中,对兼容ARM9的软核处理器进行了FPGA设计研究。当时的设计目的是要和原版的ARM9TDMI一模一样,仿佛稍微有一些不同,就没有设计成功一样。现在看来,其实大可不必。
这大概是“山寨”的必由之路:一开始对某原版产品分析得仔仔细细,列出基本功能,然后开始模仿,并模仿到每一个细节都相似,然后推向市场,声称开发出了一款功能与原版类似的产品。比如市面上经常看到的仿苹果手机,从界面到开机屏幕,再到桌面布局,几乎做到惟妙惟肖,真假难辨。然后呢?……
但我的“山寨”之路却不想停留在模仿表面上,原因在于软核处理器设计出来后,它的最大目的不是“炫耀”,而在于它的实用价值。它的的确确能够帮助开发者在FPGA开发板上玩出花样,玩出精彩,它最大的目的在于帮助更多爱好开发FPGA设计的人。既然如此定位,在“山寨”的路上就得前进一步,在原版的基础上进行创新和扬弃。
对处理器架构进行创新的想法萌发于对嵌入式软件开发工具的熟悉。最开始, FPGA设计者对嵌入式软件的各种开发工具知之甚少,只知它最后生成了BIN文件,且这个文件可以被FPGA设计的ROM“吃”进去。因此只需要阅读某某公司出来的既定的“处理器架构”文档,按照该文档预定的方方面面进行设计就可以,设计者几乎不会想到对某些要点进行更改。这个想法几乎是有点“逆天”的,因为当设计者连模仿到某种相似的程度都做不到,怎么可能想到对处理器的架构进行更改呢?但现在若能够对它模仿得惟妙惟肖,那为什么不能按照设计者的意愿将其定制成自己感觉舒服的架构呢?但前提是需要嵌入式软件开发工具配合。编者在用了大大小小的嵌入式开发软件后,发现它们其实挺配合的。
用嵌入式开发软件做什么,也就是嵌入式软件能起什么作用?嵌入式软件就是一个翻译机,主要是把C语言翻译成机器语言,也就是生成BIN文件。然后这些含有机器语言的BIN文件被软核处理器“吃”进去。这些机器语言对阅读者来说是天书,但对于软核处理器却是对口的。软核处理器会按照该BIN文件规定的一条条指令进行执行,那么C语言想表达的意思就得到了执行。因此嵌入式软件主要干的活就是翻译C语言。
处理器架构设计者除了规定该类处理器支持指令的含义外,还规定了该类处理器的硬件架构,例如ARM9的七种工作模式、Cortex-m0的多类中断支持、8051的计数器和串口。这些硬件架构一旦被制定完毕,即被各方开发者奉为至宝,并严格按照该类硬件架构进行设计,从不敢越雷池半步。但嵌入式软件开发者使用开发软件的时候,要重新学习这些硬件特性,并在编写C语言程序的时候体现它们。他们倒是敢作敢为,因为嵌入式程序是他们写的,他们有这个能力使硬件架构按照某种规则活动。
就本书的8051处理器来说,不管是前人实现的8051软核处理器还是市面上出售的8051的单片机,都有两个特殊操作的计数器。嵌入式开发者在开发8051的嵌入式软件时,必先学习如何调理好这两个计数器。但软核处理器设计者们可以改变这个规则。他们完全可以按照项目的需要配备计数器,而无须计较什么规定。对于8051软核处理器来说,用到什么就设计什么,有些东西没有用,则完全可以去除。因此设计者也可去掉这两个计数器,这也表示改变了8051的既定架构,但这种改变又有何不可呢?设计者完全可以按照需要生成自己的计数器,而不需要学习8051规定的那套繁琐的使用规则。
处理器架构可被人为地区分成两部分:一部分是可以改变的;一部分是不可以改变的。划分的依据在于嵌入式软件,如果改了某部分,则嵌入式软件不能自如地翻译C语言,那么这部分就属于不可改变的。不可改变的部分包括有多少个寄存器、多少条指令支持。如果设计者去掉了某条指令,但软件翻译的时候却不知道哪条指令被去掉了,因此它仍会将相应的C语言翻译成这条指令,那么软核处理器在碰到该指令的时候,就无法处理了。当然就连这个也是可以商量的,比如乘法指令,因为硬件乘法比较耗费资源,所以可以让软核处理器不支持乘法指令,然后再编写C程序的时候,有意改变编程风格,避免让嵌入式软件生成到乘法指令,那么其实连指令集也都可以改变。
另外一部分就是可以更改的。比如架构规定了两个堆栈指针,但项目只需要一个堆栈指针即可,C程序和汇编程序里面也根本不会用到两个堆栈指针,那么为什么还要两个呢?架构当初这么设计是为了照顾大多数人的需要,但现在,设计者既然自己设计了软核处理器,那么完全可以做到专用——可以任意设计处理器,需要什么硬件架构,就可以在FPGA上
实现。
因此,本章在讲8051架构的时候就分开来讲,具体分为两部分:一是必须要实现的特性;二是可以舍弃的特性。对于必须要实现的特性,那毫无疑问必须要弄清楚,而且要理解得非常透彻非常明白,在执行设计的时候,也要彻底。但对于可以舍弃的特性,我们只需了解即可。以前面举的两个计数器为例,在此就不再详细讲解如何将其设为何种模式,如何让它工作等。读者在阅读了本书后,一定能够自行添加需要的计数器。在这种情况下,再去将就原来的计数器就显得毫无意义。当然,若特别钟情原来的架构或原来的嵌入式软件,而非要适用原来架构的设计者,也可以查找8051的资料,弄明白它的方方面面,然后自行添加上去。
这个原则好比日常所使用的键盘。它有26个字母和标点符号、以及Esc、F1~F12、Insert、Delete、Home、End、PgUp、PgDn等按键。26个字母好比核心指令,你一个也不能省,省略了则不能叫键盘了,标点符号要看情况省,这就好比某些乘、除法指令,可以在某种特殊情况下省。至于Esc、F1~F12、Insert、Delete、Home、End、PgUp、PgDn等按键,你完全可以按需配置,无须学习既有键盘的那套规则。
1.2 8051处理器基本模型
基于上述原则,我们来讨论8051处理器的架构。在分析前,首先建立处理器的基本概念。
处理器架构的基本模型如图1.1所示。
图1.1 处理器架构的基本模型
该图分为三部分:最左边的方框是指令池(CODE区);最右边的方框是数据池(数据区);中间虚线区域为处理器模型。CODE区和数据区是处理器设计的两大主题,它们解决了软核处理器的两大难点:该怎么做和对谁做。CODE区里从0开始按顺序排列着指令,软核处理器可从它那儿得到该怎么做的信息。数据区作为数据的存储池,它也按顺序排列着数据,软核处理器可从它那儿得到处理的对象。一般来说,软核处理器从CODE区里面读出指令,分析指令的含义。指令具有的含义,说白了就是从数据区内的某处取出某数据,进行若干处理,然后写回某处。
处理器模型是所有事件的发起者,是不折不扣的主角。一般来说,它会从指令池的0地址开始取第一条指令,然后执行,下一次再取第二条,如果不遇见跳转指令,它会一直取到指令池的结束。而跳转指令会改变指令池的读取程序,强行它从某某地址重新开始读指令,然后一直递增,直到遇到下一条跳转指令。
好了,处理器开始读取指令。那么它首先得告诉指令池,它要取哪一条指令,不然指令池会出错。因此处理器会送给指令池一条地址信息,32位处理器的地址信息是32位宽的,因此指令池在理论上可以存放232个指令数据,也就是常说的4GB的地址空间。当然这4GB并非专属于指令池,通常的做法是:让指令池和数据池共用同一地址空间。8051作为8位处理器,地址线的宽度应该是8位,但其实不是,它的地址位宽是16位,因此指令的最大空间是216,也就是64 KB的地址空间。它和32位处理器不同的是这64 KB的空间乃属于指令池专用。
处理器对指令池给出地址,声明需提取指令池的xx地址的指令。指令池给出对应指令A,处理器把指令A放置于它的“当前执行的指令”区域,作为这次操作的主题。指令A的操作一般分为3步:第一步,从数据池的xx地址处取出数据,放于“当前处理的数据”区域;第二步,对“当前处理的数据”进行数据处理,最终改变成想要的形式;第三步,告诉数据池,某数据写回yy地址。上述三步完成,该指令即执行完毕,换下一条指令到“当前执行的指令”区域,重复上面的三步操作,如此周而复始。
每条指令的执行效果可能非常微小,但汇聚在一起就是一件有意义的行为。众所周知,指令池由开发软件编译而成,而开发软件编译的基础是C语言程序或汇编。这些C语言程序或汇编是由开发者编写的,并反映着开发者的意图。开发者也就是通过“C语言程序-开发软件-BIN文件-指令池内容”这条线来体现自己的意图的。软核处理器作为最低等的“生物”,它只是机械地按照指令池的内容进行执行,如此而已。
我们经常说8051处理器是8位的,它指的是指令池和数据池的位宽。每次从8051的指令池里取指令,都是以8位为基础的,但指令并非是8位的,而是参差不齐的。有的指令长一点,有3个字节;有的指令稍短,只有1个字节。8051处理器取出这些长短不一的指令,并解析执行之。
1.3 8051的接口
数据池的每一数据位宽为8位,也就是每次从数据池取出一个单元的数据都为8位。数据池和指令池不同的是,它的构成更加复杂。指令池作为存放预先编译的指令汇集,它完全可以用ROM来代替(ROM是只能读不能写),我们只执行命令时,希望命令保持不变。数据池是一类数据的集合,它可以是RAM、某种特殊用途的寄存器,也可以是输入、输出引脚。
图1.2是某种8051单片机的内部架构框图。乍一看其全是条条框框的功能模块。不过不要紧,我们不是8051的嵌入式软件或硬件设计者,不必细究它们各自的详细含义。我们只需观其大略。
图1.2 8051单片机的内部架构框图
首先,通过该图了解它的引脚。最左边的边框,从上到下:VCC和VSS是供电引脚,PSEN用来读取外部指令池,ALE用来锁存输出的地址,EA是用来激活外界接入存放指令的ROM的,此三者都是用在外界连接存储空间的;RST用来对单片机复位。
最下部是晶振。XTAL1 XTAL 2是两个连接着的晶振,一般来说,在12个周期的晶振时间内,CPU会执行一条8051指令。当然ARM9、Cortex-m0这样RISC架构的CPU会一个周期执行一条。8051的指令有它的特殊性,这个在后面会讲到。
剩下的是四个8位宽的接口:P0.0~P0.7、P1.0~P1.7、P2.0~P2.7、P3.0~P3.7。前面的接口我们大略知道它们的功用,而这四个接口既可以用作输入端口,也可以用作输出端口。它是单片机和芯片外部交换数据的主要通道。它既可以和EA、ALE、PSEN结合起来从外界读指令池的指令,也可以用作读取外界存放的数据池的数据,它还能用作通用接口(即GPIO)。
那么这四个接口(P0~P3)是如何被8051的处理器感知和使用的呢?P0、P1、P2和P3属于数据池的一部分,它们各自拥有不同的地址。它们的地址分别对应的是:80H、90H、A0H、B0H(后面的H代表前面的数据属于十六进制)。开发者在读P0的时候,只需要驱动C或汇编程序从80H的地址读取它对应的数据则可,那么单片机会把P0作为输入引脚,并将外界对它输入的电平信息告知处理器。处理器就会明确P0接口的状况如何,这就实现了读取操作。
同样,当开发者想改变P3接口的电平状态时,他可以对B0H地址写入他想写的字节数值。处理器会把写信息送到P3接口。那么P3就作为输出引脚,开发者想要的输出电平信息就反映在P3这7个引脚上了。
正因为这样,单片机只有一个,但我们可以连接P0~P3到不同的应用场合,并通过读取或改写它不同的端口状态来达到特定的使用需求。这就是单片机灵活通用的所在。单片机只是一种让开发者任意改变来满足自身需求的手段。
读者要问了,为什么是四组接口呢?单片机作为一种通用的手段,它只规定有四个,若觉得太少,可想其他方法来解决这个资源冲突。但如果在FPGA里面使用8051软核处理器,那就完全可按照自己的需求定制。当然除非是专精于8051单片机编程的程序员会觉得接口多了少了不习惯。但编者也相信他会因为FGPA的高度灵活和可配置性而改变他的习惯。

……

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.