一 总线和协议

原创用友财务软件 2022-09-09 12:45:09  阅读 428 次 评论 0 条
摘要:

如何集成各种组件? 在这里我们应当考虑的问题 如何支持不同的访问模式如何保证数据的无错误移动如何提供快速的响应时间和足够的带宽如何通过CPU访问所有的组件...补充概念 ROM、RAM、DRAM

本文主要分享【】,技术文章【一 总线和协议】为【luuuugang】投稿,如果你遇到相关问题,请看以下文章。

如何集成各种组件?

在这里我们应当考虑的问题

如何支持不同的访问模式如何保证数据的无错误移动如何提供快速的响应时间和足够的带宽如何通过CPU访问所有的组件...补充概念 ROM、RAM、DRAM、SRAM、FLASH区别ROM:系统停止供电后仍可以保持数据。???????ROM有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢RAM:系统掉电之后丢失数据,典型的RAM就是计算机的内存。速度比ROM快???????静态RAM(SRAM):读写速度快,价格昂贵,只用在要求苛刻的地方,比如CPU的一级缓冲,二级缓冲。动态RAM(DRAM):保留数据的时间短,速度比SRAM慢,用作计算机内存。DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等。 DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作

具体的工作过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。

FLASH(闪存):结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,它用作存储Bootloader以及操作系统或者程序代码,或者直接当硬盘使用(U盘)。 目前Flash主要有NOR Flash和NADN Flash。DMA

???????

SPI I2CHDMIUSBGPIO 概述

总线(Bus)是指一组公共线,它们电连接各种块,以便在各个模块之间传输数据。

协议(Protocol ),这里指的是通信协议,是一组完成总线模块之间数据传输的规则。

Processor:中央处理器;Memory:存储器;Peripheral:外围设备 。

数据的传送与接受

Valid:使Module B知道data有效;

Ack:Module B收到数据之后,返回确认的信号;

由于同一设备的不同输出端口之间会存在传播延迟,所以会存在skew,且数据有效的窗口会比较狭窄。

?Slave的选择----Decoder or Selector

解码器(Decoder)有两种分布方式:Centralized;Distributed。

Master的选择----Arbitration

在同一个资源被多个模块所共享的时候,仲裁器来决定谁使用共享资源。所以输入的是各模块的请求(req),输出的是grant。

1.仲裁器的分布方式:Centralized;Distributed。

?2.仲裁器的种类:

????????1.Fixed priority固定优先级仲裁器?

? ? ? ? 当0、1、2、...N-1个source同时发起request,source0的优先级最高,即便source0被响应后,仍未最高优先级,其中优先级按着序号逐渐降低。

????????2.Round-robin轮询仲裁器

? ? ? ? 轮询仲裁的规则为当0、1、2、...N-1个source信号源同时向仲裁器发出请求时,初始情况下source0的优先级最高,当仲裁器响应了source0之后,source1的优先级最高。

? ? ? ? 轮询仲裁器的实现分为检测仲裁器输入口source信号源request,根据当前仲裁器的优先级响应相应的request,仲裁器grant输出source端的请求,更新仲裁器的优先级。

仲裁器可能遇到的进程问题

死锁(Deadlock):当一个进程由于需要获取另一个线程持有的资源,当前线程持有另一个线程所需要的资源,就会发生死锁。 在死锁期间,所有涉及的线程都处于等待状态。

产生原因:源于多个程序对资源的争夺,不仅对不可抢占资源进行争夺时会引起死锁,而且对可消耗资源进行争夺时,也会引起死锁。

必要条件:互斥条件,不可剥夺条件,请求和保持条件,循环等待条件

互斥条件(mutual exclusion):临界资源是独占资源,进程应互斥且排他地使用这些资源。占有和等待条件(hold and wait):进程在请求资源得不到满足而等待时,不释放已占有资源。不剥夺条件(no preemption):又称不可抢占,已获资源只能由进程自愿释放,不允许被其他进程剥夺。循环等待(circular wait):又称环路条件,存在循环等待链,其中,每个进程都在等待链中等待下一个进程所持有的资源,造成这组进程处于永远等待状态。

前三个条件是死锁存在的必要条件,但不是充分条件。第四个条件是前三个条件同时存在时所产生的结果,故条件并不完全独立。但是单独考虑每个条件是有用的,只要破坏四个之一,就可以防止死锁。

活锁(Livelock):当线程正在等待永远不会变得可用的资源,而CPU忙于释放和获取共享资源时,就会发生活锁。它与死锁类似,不同之处在于,活锁中涉及的进程状态不断变化,并且频繁执行而没有取得进展。

通俗得讲,活锁应该是一系列进程在轮询地等待某个不可能为真的条件为真。活锁的时候进程是不会blocked,这会导致耗尽CPU资源,这是与死锁最明显的区别。

饥饿(Starvation):指系统不能保证某个进程的等待时间的上界,从而使该进程长时间等待,当等待时间会给进程推进和响应带来明显影响时,称发生了进程饥饿。当饥饿到一定程度的进程所赋予的进程即使完成也不再具有实际意义时称该进程被饿死。

产生原因:如果一个线程因为处理器时间全部被其他线程抢走而得不到处理器运行时间,这种状态被称之为饥饿,一般是由高优先级线程吞噬所有的低优先级线程的处理器时间引起的。

必要条件:没有其产生的必要条件,随机性很强。并且饥饿可以被消除,因此也将忙等待时发生的饥饿称为活锁。

饥饿与死锁

相同:二者都是由于竞争资源而引起的。

不同

从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限没有上界(排队等待或忙式等待);死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。

例子:

死锁:砍树你需要一个斧子,但是斧子又需要木头来做,这就发生了死锁。

饥饿:排队过程中,总有人插队到你前面,你一直处于排队状态,这就发生了饥饿。

饥饿

Round-robin

?传输类型

如何高效利用总线呢?我们希望它的延迟最小化,吞吐量最大化,即速度与带宽。

burst传输pipelined 传输split传输

?部分参考内容

操作系统:死锁和饥饿_燕双嘤的博客-CSDN博客_操作系统饥饿

死锁(deadlock)、活锁(livelock)与饿死(starvation)_四道风尘的博客-CSDN博客_livelock

ROM、RAM、DRAM、SRAM和FLASH的区别_种瓜大爷的博客-CSDN博客_sram

DMA总结_HelloWuyp的博客-CSDN博客_dma

本文《一 总线和协议》版权归luuuugang所有,引用需遵循CC 4.0 BY-SA版权协议。

本文地址:https://www.ufidawhy.com/gjp/120184.html
版权声明:本文来源于网络,如有侵权请E-mail联系 ufidawhy 站长 ufidawhy@vip.qq.com!

评论已关闭!