精华内容
下载资源
问答
  • CPU之间通信方案

    千次阅读 2020-06-01 10:16:52
    如果有一款芯片集成有两个CPU,CPU之间通信在芯片内部就能又快又可靠的完成,想象是美好的,但是结局是悲伤的,需求差异太大,只能定制(成本高的无法想象)。我们通过组合不同CPU芯片实现我们想要的功能。 比如说...

        在设计电子电气系统的时候,经常会遇到需要设计两个或两个以上CPU协同工作情况。如果有一款芯片集成有两个CPU,分别能满足要求,CPU之间的通信在芯片内部就能又快又可靠的完成,想象是美好的,但是结局是悲伤的,需求差异太大,只能定制(成本高的无法想象)。我们通过组合不同CPU芯片实现我们想要的功能。

        比如说,现在有个安全系统需求,需要一个通信CPU与其他系统通信,这个通信CPU要和本系统内的执行功能算法的CPU交互数据,这时候我们去市场上查找发现:没有这种即能满足通信需求又能满足功能算法的集成双CPU方案!那我们可以通过不同厂家的芯片组合在一起实现:使用TI的DSP实现功能算法,使用ST的ARM实现通信。现在问题来了,两个CPU之间怎么进行通信!下面作者结合自己遇到项目,分析不同CPU通信方案的特点!

    1.为什么需要双CPU

    (1) 资源限制

       电子电气系统使用的嵌入式CPU往往资源非常有限,RAM和Flash一般几百K,内部的外设接口也有限。一个CPU不能完成一个系统所需要的功能,需要两个或以上的不同CPU才能完成。通过多CPU设计,系统的可用的资源可以满足需要。

    (2)功能划分

         电子电气系统由很多功能是可以独立划分的,比如说,一部分是通信的,一部分是数据采集的,一部分是执行用户逻辑的,一部分是输出的,功能划分有利于分而治之。

    (3)保密性

        有些公司处于技术保密性,将自己的核心成果封装在一个CPU内,提供给客户,客户只需要知道接口而不必懂的里面的实现。现在有很多无线物联网公司开发自己的无线协议,他们很多使用ARM的M0内核的烧写自己的协议,使用SPI或串口作为接口,提供无线互联解决方案。

    (4)行业或标准要求

            比如说安全要求比较高的行业,如汽车电子,石油化工等系统,一旦电子系统出现问题,就会造成巨大的生命和财产损失,要求诊断和保护系统需要运行在单独的CPU内,与执行功能的主CPU完全分开解耦,即使在主CPU出现故障,也不会影响执行保护系统。

           电梯行业应用单独的CPU诊断电梯的状态就是个典型例子。主CPU负责电梯的升降,辅助CPU负责对电梯的位置,速度等关键信息进行监控,一旦检测到有问题就会报警或停机。

          在功能安全领域标准IEC61508,包括汽车电子标准ISO26262,有强制的要求,达到SIL标准的系统必须使用多CPU通道设计,增加系统的可靠性!(该如何使用多CPU设计符合功能安全的标准我会在今后详细分析)

    (5)分工需要

        在公司开发一套电子电气系统,需要各个不同领域的人,比如说硬件,软件,做硬件的有的人擅长DSP硬件,有的人精通ARM硬件;做软件的人,有的人在无线通讯有经验,有的人专注驱动层开发。如何将团队组织在一起协同工作是个需要思考的问题。有很多时候是为了分工提高劳动效率,尽量减少不同领域之间的不必要的耦合,在出现问题时可以快速找到问题和责任人,绩效考核谁干的好谁干的不行等目的将一套系统划分为多个部分,由不同的CPU执行。

       分工产生产生效能!一个人不掌握全部技术,这么干老板很喜欢!

     

    2.双CPU之间通信选择

        常见的CPU之间可以通过串口,SPI,双口ram,CAN,以太网

    2.1 各方案的比较

                                                  

    2.2 串口方式

    激光器,蓝牙芯片

         两个CPU之间通过串口通信,简单,速率低,适用于绝大部分交互不是太频繁的领域。比如蓝牙芯片,激光器等提供使用串口和AT指令与主CPU交互。

                                                                             

          由于串口的通信波特率一般不大于115200,而且串口数据一个byte一个byte发送,需要在接收方判断收到数据一个延时后没收到下个数据,认为数据已经接收完成,这种方式大大降低了数据的交互速度。

     

    2.3 SPI

       spi由于速度快,简单,同步,全双工,占用IO少已经广泛使用在flash,ADC等IC的接口。两个CPU使用SPI通信,需要设计一套两个SPI交互的方案,否则很容易出现数据丢失。spi的波特率一般可以达到20M以上,发送一个数据不到1us,适用于绝大多数场合。

     

         使用spi通信一般可以分为两种:

      (1)数据同步交互 

         spi主在发送数据的同时也接收数据。接收和发送数据的个数和内容完全由主SPI决定。交互的数据格式可以参考spi flash芯片。主spi先拉低数据请求,接着发送命令和地址,接着发送0x0000数据,产生时钟读取从的数据,从发送多少个数据完全由spi主的时钟个数决定。下面看一个同步数据传输实例。

        spi主需要发送数据,首先拉低片选,接着发送8bit的命令和8bit的数据,从spi通过中断接收到命令和数据后,解析,准备好数据放到spi 发送寄存器,等待spi主取数据,每8bit clock后spi从就会把下一个发送数据放到寄存器。spi主决定什么时候数据结束,最后拉低片选,告诉从spi数据结束了。整个过程需要注意的是(1)从的数据要提前准备好,放入寄存器等待读取  (2)发送命令和地址后,主需要发送无意义数据通常0x00,产生clock。(3)spi主接收的第三个数据开始才是主需要的第一个数据。

    问题:这种模式从不能随心所欲的发送数据,即不能在任何时候发送任何长度的数据。

     (2)数据异步交互

    使用数据异步方式的过程如下

    (1)spi主发送数据  首先拉低Tx_master,开始发送数据,当发送数据接收后,再拉高Tx_master,这时候spi从就会接收到“一帧数据”,从而解析。spi从最好使用中断接收,以免数据丢失。

    (2)spi从发送数据 spi从发送数据前,需要将发送数据的长度放入spi从的发送寄存器,然后拉高Tx_salve,spi主检测到Tx_salve高就会产生clock,去取从发送数据的长度N,接着主发送N个clock,每当数据发送完成,从需要将下一个数据放入寄存器。

         从上面的两个过程我们可以发送,数据的传输是半双工的,主发送数据的时候,接收从的数据是无用的,从发送数据组发送的数据也是无效的。数据交互效率降低了,但是很多时候,spi从想随心所欲的发送数据,这种方式还是非常实用。

      

    2.3 双口RAM

    两个CPU外部接一个双口RAM,CPU就像使用外扩RAM一样

    2.3.1 ASCI双口RAM芯片

     

    2.3.2 CPLD/FPGA

    2.4 CAN总线方式

         CAN总线低成本,高可靠性,具有非破坏仲裁等优势,几乎每个CPU都有一路或以上CAN模块。在交互数据不是很多,又要求数据可靠性很高的场合,选择CAN交互非常合适。我见到过的在风力发电控制系统中使用CAN对采集的两路信号比较,还有石化行业DO板使用CAN总线比较输出。

    2.5 以太网

        双CPU以太网点对点交互数据,多用于热备和冗余2取1系统。

      (1)1OO2冗余2取1系统,主要应用对安全要求极高的系统。在石化行业,有一种紧急停车ESD系统,采集外部的压力,温度,开关等信息,见过冗余双网络送到CPU1和CPU2分别处理,然后通过以太网比较,最后控制阀门的开闭。(数据怎么同步,怎么比较见下次论述)

    (2)热备系统

    热备系统不仅可以在主机出现问题的时候切换到从机,而且可以在工厂检修时候不用停机,提高了系统的可用性!

     

    未完待续。。。。。。。

     

    展开全文
  • 详细介绍了西门子300 PLCSim之间的仿真通讯,以前我也没做过的,看了这之后可以做两不同工程之间的通讯了,能模拟站通讯
  • CPU与加速芯片之间通信总线

    千次阅读 2018-05-06 10:15:18
    从这看,加速芯片最好是挂在CPU的内部高速总线上,比方说intel的QPI总线,他不但高带宽、低延迟,而且FPGA加速芯片可以做到直接共享主CPU的内存,而不必像PCIE这样,较数据的计算时基本上要进行因此内存拷贝。...

    加速芯片与CPU之间的连接一般通过DMA进行。在进行DMA描述之前,我们先了解一下CPU与加速芯片的互联总线,加速芯片与主CPU间的通信总线,一般要求低延迟、高带宽。

    从这个看,加速芯片最好是挂在CPU的内部高速总线上,比方说intel的QPI总线,他不但高带宽、低延迟,而且FPGA加速芯片可以做到直接共享主CPU的内存,而不必像PCIE这样,较多数据的计算时基本上要进行因此内存拷贝。更牛逼的是intel的QPI可以做到硬件保持cache一致性。。。其他家也有一些类似的技术,比如Power PC的CAPI技术,ARM、xilinx等推动的CCIX等。但鉴于Intel在服务器处理器领域的霸主地位,个人觉得其他家很难有机会。

    其次就是延迟稍大一些的PCIE,延迟大了以后,在处理上一般就要用到命令队列了,延迟越大,为了充分利用总线带宽,命令队列就要做到比较深,设计更复杂,也会带来更大的处理延迟,软件上要做到高性能就相对更难一些。

    再往后的就要走类似以太这种网络接口了,延迟更大,但也有好处,可以连接更多的设备进行加速。

    一般性的原则是,加速芯片约靠近CPU,延迟越低,设计时CPU与加速器之间的耦合性可以强一些,放到硬件加速的函数可以设计的“小而灵活”,越远耦合性应该越小。到网络接口连接加速芯片时,那就尽量松耦合了,要把一大块的功能放到加速芯片中。



    展开全文
  • CPU和GPU之间通信

    千次阅读 2017-03-29 11:34:09
    渲染流水线的起点是CPU,即应用阶段。大致可分为下面三阶段: 1.把数据加载到显存 2.设置渲染状态 3.调用DrawCall 1.把数据加载到显存 所有渲染所需要的数据都需要从硬盘(Hard Disk Drive, HDD)中加载到...

    渲染流水线的起点是CPU,即应用阶段。大致可分为下面三个阶段:

    1.把数据加载到显存

    2.设置渲染状态

    3.调用DrawCall

    1.把数据加载到显存

    所有渲染所需要的数据都需要从硬盘(Hard Disk Drive, HDD)中加载到系统内存(Random Access Memory,RAM)中。然后,网格和纹理等数据又被加载到显卡上的存储空间:显存(Video Random Access Memory,VRAM)中。这是因为显卡对于显存的访问速度更快,而大多数显卡对于RAM没有直接的访问权利。

    注意:真是渲染中需要加载到显存的数据复杂的多。例如:顶点的位置信息、法线方向、顶点颜色、纹理坐标等。

    之后,开始通过CPU来设置渲染状态,从而使GPU进行渲染工作。


    2.设置渲染状态

    渲染状态:通俗的解释就是,这些状态定义了场景中的网格是怎样被渲染的。例如:使用哪个顶点着色器/片段着色器、光源属性、材质等。如果我们没有更改渲染状态,那么所有的网格都将使用同一种渲染状态。

    设置好渲染状态后,CPU需要调用一个渲染命令来告诉GPU开始进行渲染,这个渲染命令就是DrawCall。

    3.调用DrawCall

    DrawCall就是一个命令,它的发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元(primitives)(点、线、三角面)列表,而不会包含任何材质信息(因为已经在2中完成了)。

    当给定一个DrawCall时,GPU会根据渲染状态(例如:材质、纹理、着色器等)和所有输入的顶点数据进行计算,最终输出像素。














    展开全文
  • 西门子S7-1500 与 S7-1500 之间的以太网通信可以通过 TCP 或 ISO on TCP 协议来实现,使用的通信指令是在双方 CPU 调用 T-block (TSEND_C, TRCV_C, TCON, TDISCON, TSEN, TRCV) 指令来实现。通信方式为双边通信,...

    西门子S7-1500 与 S7-1500 之间的以太网通信可以通过 TCP 或 ISO on TCP 协议来实现,使用的通信指令是在双方 CPU 调用 T-block (TSEND_C, TRCV_C, TCON, TDISCON, TSEN, TRCV) 指令来实现。通信方式为双边通信,因此 TSEND 和 TRCV 必须成对出现

    一、S7-1500 CPU之间TCP通讯组态准备

    1、硬件准备:

    ① S7-1500 CPU
    ② PC(带以太网卡)
    ③ TP电缆(以太网电缆)

    2、软件准备:

    博图 V15.1 (本文以博图V15.1为例)

    二、通信的编程,连接参数及通信参数的配置

    1、打开 博图 v15 软件并新建项目

    2、添加硬件并命名plc

    然后进入 “Project view”,在“Project tree” 下双击 “Add new device”,在对话框中选择所使用的S7-1500 CPU添加到机架上,命名为 PLC_1。同样方法再添加通信伙伴的S7-1500 CPU ,命名为 PLC_2。

    为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:

    在 “Project tree” > “PLC_1” > “Device configuration” 中,选中 CPU ,然后在下面的属性窗口中,“Properties” > “System and clock memory” 下,将系统位定义在MB1,时钟位定义在MB0。时钟位我们主要使用 M0.3,它是以2Hz 的速率在0和1之间切换的一个位,可以使用它去自动激活发送任务。

    3、为 PROFINET 通信口分配以太网地址

    在 “Device View”中点击 CPU 上代表PROFINET 通信口的绿色小方块,在下方会出现PROFINET 接口的属性,在 “Ethernet addresses” 下分配IP 地址为 192.168.0.1 ,子网掩码为255.255.255.0,如下图所示。

    同样方法,在同一个项目里添加另一个新设备S7-1500 CPU 并为其分配 IP 地址为192.168.0.2。

    4、创建 CPU之间的逻辑网络连接

    在项目树 “Project tree”>“Devices & Networks” >“Networks view” 视图下,创建两个设备的连接。用鼠标点中 PLC_1 上的PROFINET通信口的绿色小方框,然后拖拽出一条线,到另外一个PLC_2 上的PROFINET通信口上,松开鼠标,连接就建立起来了,如下图所示。

    5、创建 CPU之间的TCP连接

    创建TCP连接方式有两种方式:使用程序块、使用组态的连接。

    使用程序块:参见plc编程方式
    使用组态的连接:两种方式

    (1)、在项目树 “Project tree”>“Devices & Networks” >“Networks view” 视图下,创建两个设备的连接。选择连接,下拉列表选择tcp,然后用鼠标点中 PLC_1 上的PROFINET通信口的绿色小方框,然后拖拽出一条线,到另外一个PLC_2 上的PROFINET通信口上,松开鼠标,连接就建立起来了,如下图所示。

    (2)、在项目树 “Project tree”>“Devices & Networks” >“Networks view” 视图下,创建两个设备的连接。选择连接,下拉列表选择tcp,然后用鼠标点中 PLC_1 上右键选择添加新连接,然后在弹出的对话框内选择要连接的PLC,点击添加按钮。通过这种方式建立的连接可以在连接选项内看到已经建立的连接,并且可以更改连接相关参数。用此方式编程中需要注意,选择连接类型时要选择使用组态的连接如下图所示。

     

     

    展开全文
  • 文章目录cpu架构和工作原理多核cpu多cpu架构cpu的缓存进程和线程进程和线程在多核cpu多cpu中的运行关系 cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到...
  • 多CPU单线通信原理与实现

    千次阅读 2014-07-17 13:04:49
    多CPU单线通信原理与实现  原理图 (原文件名:多CPU单线通信原理图.JPG)   发现所有已发帖子都丢了,用户也注销了,还是重新注册回来的。下面转正题。  所谓单线通信,其实还是需要...
  • S7-1200PLC 两台CPU之间Modbus RTU通信

    千次阅读 2020-03-08 14:15:28
    目的:建立两台cpu之间的Modbus RTU通信 软件:Portal V14SP1 Modbus RTU是一种单主站的主从通信模式,Modbus网络上只能有一主站存在,主站在Modbus网络上没有地址,每从站必须有唯一的地址,从站的地址范围为0 ...
  • 在现实应用中,很多时候都需要让多个线程按照一定的次序来访问共享资源,例如,经典的生产者和消费者问题。这类问题描述了这样一种情况,假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库...
  • 然而从通信的角度来看,数字信号的特征量就是研究的重点,即如何通过控制数字电信号的特征量,实现在两芯片节点之间传递0和1的信息。 理解如何利用数字的电信号来传递0和1的信息,非常有助于理解,如何通过模拟...
  • CPU与GPU的区别及通信时间简要分析

    千次阅读 2019-04-27 10:16:51
    CPU就好比一全能的教授,个人能力超级突出,可以处理各种各样的问题,但是在一些单计算的角度,尤其是深度学习发展所需要的大量的矩阵运算时,性能不如GPU,原因还是在与GPU设计走的小而简单化,而CPU走的是大而全...
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、...
  • 1.2 CPU与GPU间通信

    千次阅读 2017-06-05 23:04:57
    1.2 CPU与GPU之间通信渲染流水线的起点是CPU,即应用阶段。该阶段大致可分为以下3阶段:1.把数据加载到显存中所有渲染所需的数据都需要从硬盘(HDD)中加载到系统内存(RAM)中,然后,网格和纹理等数据又被加载到...
  • 多核 CPU多个 CPU 有何区别?

    千次阅读 2018-03-27 10:58:44
    如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一...
  • 多核cpu通信的相关寄存器

    千次阅读 2017-08-02 09:27:06
    loongson3A-4核cpu为每处理器核都实现了9核间中断寄存器(IPI)以支持多核BIOS启动核操作系统运行时在处理器核之间进行中断核通信。 首先是总的介绍下寄存器的作用: 下面分别是每核的寄存器,以及地址。 ...
  • 文章目录1 cpu架构和工作原理2 多核cpu多cpu架构3 进程和线程4 多核、多CPU线程、进程的对应关系5 总结 1 cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器...
  • C++ 线程之间通信方式(windows下实现)

    万次阅读 多人点赞 2019-07-18 15:28:55
    最近学习了C++ 线程之间通信方式,记录一下。 参考原文:https://blog.csdn.net/eulb/article/details/2177500 C++线程的通信方式有很种,这里记录一下常用的几种: 1.全局变量 2.互斥量 3.信号量 4.事件 5...
  • CAN总线详解

    万次阅读 多人点赞 2019-07-23 18:00:12
    传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,主结构。近些年来,CAN控制器价格越来越低。 Ø 低成本:ECUs通过单个CAN接口进行通信,布线成本低。 Ø 高集成:CAN总线系统允许在所有ECUs上进行...
  • 多个CPU和多核CPU以及超线程(Hyper-Threading)详解

    万次阅读 多人点赞 2017-01-15 21:31:28
    在这篇文章中我会主要介绍CPU相关的一些重要概念和技术。如果你想更好地了解操作系统,那就从本文开始吧。
  • 介绍显卡之前,必须得和大家交待清楚,那么的外部设备,cpu是如何与他们交流。 大家都学过微机接口技术吧?没学过也没关系,反正我也只是笼统地说说^_^,保证大家一定能看得懂。 按理说,如果硬件种类较少,让...
  • 计算机组成原理-基本组成

    千次阅读 多人点赞 2019-09-18 15:12:34
    计算机组成原理-基本组成 本文根据徐文浩老师的...2.1 CPU: 中央处理器(Central Processing Unit) 2.2 内存: 内存(Memory) 2.3 主板: 主板(Motherboard) 2.4 I/O设备 2.5 特殊的设备 3 冯·诺依曼体系结构 ...
  • 一、前言 接着上次第一章的题库,这次记录一下中国大学MOOC哈工大课程第三章的题库,由于整理起来比较繁琐,单选题中有一些重复选项,希望小... 通信总线 B. 片内总线 C. 存储总线 D.系统总线 正确答案:C 解析: ...
  • 计算机组成原理

    万次阅读 多人点赞 2019-06-02 14:13:55
    (1)主存(Main Memory):存储当前需要执行的程序和数据,直接与CPU通信。 (2)外存/辅存(Auxiliary Memory):提供备份存储,不能与CPU直接通信。如:固态硬盘 (3)Cache(Very-high-speed memory):用于补偿主存的访问...
  • Python实现进程间通信的方法总结

    千次阅读 2020-01-19 03:32:35
    本文全面总结Python中进程间通信的各种方法及经验。
  • java内存模型

    千次阅读 多人点赞 2018-11-09 13:09:55
    下图就是java内存模型,但是一般讨论的时候不会画这图,一般画的是java内存模型抽象结构图(在下文)。Thread Stack就是java内存模型抽象结构图中的本地内存,Heap就是java内存模型抽象结构图中的主内存。接下来介绍...
  • 引言 在这篇文章中, 我会主要介绍CPU相关的一些重要概念和技术。如果你想更好地了解操作系统,那就从本文开始吧。 中央处理器(Central ... 简单点说,CPU其实就是计算机内部的一电子电路。根据一些具体的...
  • 线程在CPU上是怎样分布的

    千次阅读 2019-07-09 16:29:02
    一般而言对于多线程的理解可以是CPU根据一定的线程调度算法来切换线程,因此在相应时段,可看作是多个线程在并发执行。但在某一时间点上实际运行的只有一个线程。 在Java多线程中有并发编程和CPU时钟...
  • Caffe简介

    千次阅读 多人点赞 2018-08-19 16:15:54
    什么是caffe? caffe的特点 caffe架构 caffe的硬件环境 caffe的依赖库 caffe的接口 1、什么是caffe?...可以在CPU和GPU之间无缝切换,其作者是贾扬清,目前caffe2已经发布。  caffe的全称是Con...
  • 周期CPU设计(Verilog) (更新:2017/5/29)

    万次阅读 多人点赞 2017-05-12 15:02:12
    注:单周期CPU设计请移步我的另一篇博文: 单周期CPU设计(Verilog)一、 实验目的(1) 认识和掌握周期数据通路原理...二、 实验内容设计一个多周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令与格式如下:
  • Java中的线程(线程间通信

    万次阅读 2018-09-23 10:22:42
    多个线程在处理同一资源,但是任务却不同。 先看一个例子,采用两个线程执行进行输入和输出任务: //资源 class Resource { String name; String sex; } //输入 class Input implements ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 294,117
精华内容 117,646
关键字:

多个cpu之间的通信