zoukankan      html  css  js  c++  java
  • 内容中断随想录(risc cpu的那些事)

    发一下牢骚和主题无关:

        

        【 声明:版权所有,欢送转载,请勿用于商业用途。  联系信箱: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
    内容和中断
    ---------------------------------

  • 相关阅读:
    力扣238.除自身以外数组的乘积 & 剑指offer 51.构建乘积数组
    网易的Airtest
    ZOOKEEPER
    Apache和Nginx负载均衡集群及测试分析
    mysql——创建索引、修改索引、删除索引的命令语句
    sql-索引的作用
    ADB连接手机的两种方式(usb数据线连接和wifi连接)
    adb shell dumpsys 命令
    count(*) 和 count(1)和count(列名)区别
    博客园页面设置
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3153436.html
Copyright © 2011-2022 走看看