发一下牢骚和主题无关:
【 声明:版权所有,欢送转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
从消费电子的soc芯片来讲,当初海内从事芯片设计的企业还是很多的,这其中有新岸线、瑞芯微、全志、炬力等等。一个完整的soc芯片其实包含了很多货色,比如说cpu核、总线、gpu核、gpio、timer、spi、i2c、i2s、video、sound等等。当然,这些核心,有的是买来的,比如说cpu核心,有的完全可以自己设计,比如说i2c、spi等等。现在消费电子的cpu一般还是以arm为主,电视机顶盒会采取一些mips核、一些交换机设备会使用powerpc核心、医疗设备上用coldfire系列的比拟多、sparc芯片多用在sun服务器上。以上谈到的这些cpu其实都是risc cpu,也就是精简指令的cpu。
risc cpu有些共同的特征,比如说指令简单、数据和指令分开、指令对齐、通用指令和协处置器分开、中断模式简单等等。基本上,如果大家学会了一种risc的cpu,再学习其他的cpu就比拟简单了。之前,risc cpu的种类很多,但是我们始终没有机会看到cpu究竟是怎么设计的。这种情况直到出现了opencores这个网站之后才有了改善。因为,网站上为我们供给了openrisc这种risc cpu的开源代码,我们才看到设计一个真正的cpu究竟需要做哪些工作。当然,凭良心而言,这份openrisc的代码还是比拟简洁的,大家如果看一下sun的opensparc代码,就会明白我想抒发的意思了。但是,openrisc虽小,常见的功能却不少,同时它拥有gcc的工具链,而且已移植到linux上了,还是非常值得我们学习的。
通过openrisc的内容,我们发现一个完整的cpu应该包括这些内容,
(01)mmu、tlb的处置;
(02)cache的处置;
(03)cpu 五级流水线的处置,即IF、ID、EXE、LS、WB的处置;
(04)pc地址的处置;
(05)中断的处置;
(06)timer处置;
(07)流水线freeze信号处置;
(08)电源管理处置;
(09)biu处置,即cpu和bus接口处置;
(10)其他内容等等。
大家如果熟悉arm体系结构的话,就会对上面的内容非常熟悉。最基本的cpu内容也就是这些货色。当然,现代cpu为了满足性能的需求,还会加入其他的一些内容,比如多cpu、流水线预测、cache同步、中断调度等等。软件与硬件打交道的方法其实就两种,汇编和中断。汇编指令帮助我们停止基本的运算、访存、读写外设寄存器、读写cpu状态寄存器、读写cpu控制寄存器,而中断就是外设与cpu打交道的方法。当然,从体系结构上说,poll和interrupt都是可以的,只不过中断效率好一点。数据传输也一样,总线到cpu、再到内存的传输方法太慢,人们因此有设计出了dma这一种数据传输方法。在cpu体系结构中,其实很多的设计都是有原因的。大家不光要熟悉这些技巧,最好对相干的背景知识有进一步的懂得。
再回到arm,基本的指令无非是加减乘除、移位、比拟、跳转、中断返回、状态获取和保存、协处置器的设置和保存、利用io地址访存外设等等。内容未几,但是前面演绎的货色就多了,比如什么时候用rtos、上下文切换怎么弄、soc体系结构怎么和linux绑定在一起、选择cpu有什么讲究、host和device有什么分工、外设协议如何和cpu打交道等等。这里面的学问还是很大的。当然,新技巧会不断出现,学习的独一方法就是学习相干技巧手册、访问官网、买设备实验等等。一般来讲,中文资料总是会慢几拍,所以学好英文还是很重要的。
胡乱写了这么多,一来是自己的总结,二来是希望与大家分享一些自己的感触。对于通用的算法,理论上其实软件、硬件都能实现,软件用c编写,跑在cpu上;硬件用verilog编写,直接综合成门电路实现。就拿float运算来讲,有些cpu就不支持,有些还需要外设的dsp的帮助,这其中的权衡利弊还是挺多的。要学的货色很多,关键是把握基本,把握之后才能思考和分析。
文章结束给大家分享下程序员的一些笑话语录:
系统程序员
1、头皮经常发麻,在看见一个蓝色屏幕的时候比较明显,在屏幕上什幺都看不见的时候尤其明显;
2、乘电梯的时候总担心死机,并且在墙上找reset键;
3、指甲特别长,因为按F7到F12比较省力;
4、只要手里有东西,就不停地按,以为是Alt-F、S;
5、机箱从来不上盖子,以便判断硬盘是否在转;
6、经常莫名其妙地跟踪别人,手里不停按F10;
7、所有的接口都插上了硬盘,因此觉得26个字母不够;
8、一有空就念叨“下辈子不做程序员了”;
9、总是觉得9号以后是a号;
10、不怕病毒,但是很害怕自己的程序;
---------------------------------
原创文章 By
内容和中断
---------------------------------