查看: 1043|回复: 0
打印 上一主题 下一主题

【深入理解计算机/单片机】从最底层看单片机(连载)

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-1 17:19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
感谢大家对信花派的支持,信花派计划的第一篇连载教程现在正式上线,我会在本贴中以回复的形式连载一个短篇教程,连载结束后将整理出PDF文档提供下载,有兴趣的朋友可以点收藏啦。

XH_CPU是一个软核CPU,也就是用硬件描述语言描述出来的CPU,设计它的主要目的就是出这篇教程,旨在讲解CPU内部以及各种外设接口的原理,希望和大家一起培养‘她’长大。
朋友们可能会有疑问,做单片机了解这些有啥用呢?烤红薯非得了解红薯的成分和结构吗?
不了解红薯的结构和成分确实不会影响到烤红薯,但是了解了红薯的结构和成分,可以帮你选到品质更好的红薯烤出火候更好的烤红薯,对烤红薯师傅也是一个自我修养(我咋就这么喜欢烤红薯)。
同样的,熟悉CPU的内部原理以及CPU挂载外设使用的总线总线上外设接口的原理,会让你更加了解单片机的外设寄存器,
选型自然不是问题,对于串口/SPI/USB/以太网等等单片机自带硬件实现的通信接口的使用也更加熟悉。
以串口为例,高端一点的单片机会有很多附加功能,比如发送和接收端带有独立的队列、等待寄存器、队列剩余多少内容时触发中断、队列满(空)中断等,可能在普通的上位机控制应用中没有什么用,
但是在多任务甚至多通信任务的情况下,可能使用到接收中断,甚至队列中断等功能,如果从原理(RTL级)上了解这些设计的意图,那么在选择单片机时,对于任何单片机都没有区别了,因为从本质上有了理解。

发帖的时候已经比较晚了,今天说一些概念就要下了,后续内容会最慢三天更新一次,感谢大家的支持!


在信花派计划中,XH_CPU只是点燃大家求知之魂的引信,所以初代机不会考虑性能问题。
一切的设计追求的都是简洁明了,以最少的代码来实现功能,所以不需要担心规模太大失去信心,只需要了解简单的verilog知识就完全能看懂。
我们的目的是,让它跑起来,真正的跑起来,跟正常的单片机没有区别,十分类似Altera的NIOS处理器(事实上我还借用了NIOS的SDRAM控制器)。

首先是CPU和外设的关系

大家可能都看到过类似的框图,在PC机的主板上,有三块明显的大芯片,CPU、北桥、南桥。由于PC的结构复杂,并且这三个功能模块的速度等级不同,所以会分成三片芯片来做。
在单片机系统(或者说SoC)中,CPU、内存、外设接口全部是集成在一块芯片上,所以分界可能不太明显。
对于主频不高的CPU,可能只有一条总线,直接挂载外设,所以对于总线这些概念,不需要分得很清,在写驱动代码时,只要心里清楚CPU的速度和目标外设的速度即可。

接下来是CPU的内部结构

还记得这张熟悉的图片吗?去掉各种各样提高性能的技术,CPU其实就是这样一个环形计数器(或者叫状态机),电路的输出总是按顺序一个接着一个来
通过译码,每个输出可以对应一个或多个电路模块的使能,反应到功能上,就是这个电路在按顺序一个一个的执行功能,循环往复从不停歇。
这些功能合起来,只执行了一个功能,那就是根据从存储器里取到的数据,执行不同的功能。
在XH_CPU中,为了让大家少一些负担,我将功能简化再简化,最后惊讶的发现,其实本质上只有两个功能:访问内部寄存器、访问存储器,而他们本质上都是存储器,只是访问方式不同!
多么神奇,脱去了层层外衣,其实只是一种功能!就像数字电路都是由与、或、非三种门加触发器(锁存器)构成一样(其实CPU的功能可以这么总结就是因为这个)。
内部寄存器用来实现基本的功能(控制程序走向、做运输),而外设接口(通信接口,存储器接口等)全部挂接在存储器总线上,按存储器来处理(也就是所谓的存储器映射访问)。
配合一些简单的组合逻辑(其实只有加法器和逻辑运算),这个CPU就可以运转起来了。设计文件在群共享里,还没有做优化,想限度为快的可以先去下载,完善后会单独开贴发布。
为了方便编程(现在还是我手写机器码),我正在开发汇编器(指令简单,所以没什么内容),并且用工具生成C语言编译器(初步打算Clang),这样就可以像玩单片机一样愉快的玩耍了。

接下来是外设
不好意思有点困了,明天补上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表