计算机体系架构/SOC

325 阅读5分钟

SoC是系统级的芯片。

CPU的基本基本结构

cpu主要分为 控制单元、算术逻辑单元ALU、存储单元。ALU做算术运算(加减乘)和逻辑运算(移位)。

控制单元首先从存储器取出各种指令,放在指令寄存器IR里,之后做指令译码来分析要做什么操作。

ALU做算术运算(加减乘等)和逻辑运算(移位等),ALU是接收控制单元的command来运算的。

冯诺伊曼将程序指令和数据一起存储,常见的是计算机 CPU、GPU;

哈佛结构将程序指令和数据分开存储,常见的 ARM、DSP 等微处理器。

哈佛结构具有较高的执行效率,程序指令和数据指令分开,可以预先读取下一条指令,可以同时取指令并取操作数,取指令和执行能够完全重叠运行。

cache

在传统的CPU计算机架构里面,cache架构目前分为两大架构诺依曼架构跟哈维架构。在诺依曼架构里面,一个cache同时用于指令与数据,是统一的一个Cache。在哈维架构里面,指令与数据总线是分开的,所以同时出现两个Cache。

Cache是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。

当CPU试图从主存中load/store数据的时候, CPU会首先从cache中查找对应地址的数据是否缓存在cache 中。如果其数据缓存在cache中,直接从cache中拿到数据并返回给CPU。

AMBA总线协议

AMBA总线的全称为高级微处理器总线架构,是ARM架构下SoC设计的一种总线架构。 AMBA包括AHB(Advanced High-perfomance Bus,高级高性能总线),ASB(Advanced System Bus,高级系统总线),APB(Advanced Peripheral Bus,高级外设总线)。

AHB的强大之处在于可以将高速ARM微控制器(High-performance ARM processor)、高带宽的片上RAM(High-bandwidth on-chip RAM)、高带宽的外部存储器接口(High-bandwidth Memory Interface)、DMA总线master等各种拥有AHB接口的控制器连接起来构成一个完整的SoC系统。

AHB总线里有:一个仲裁器(Arbiter)用于仲裁多个主设备(Master)同时访问总线的情况;三个多路选择器(地址选择,写数据选择,读数据选择)用于选通master和slave之间的data和addr。
AHB的ADDR没有分读和写的ADDR:AHB是半双工的,读和写不能同时进行,因此性能上比AXI一般来讲是要弱的。

APB,Advanced Peripheral Bus,高级外设总线,主要应用在低带宽的外设上,如UART,I2C,中断控制、定时器、GPIO等。对性能要求不高,主要是低功耗。

APB的架构不像AHB那样是多主设备的架构,APB只有唯一的主设备APB桥(与AXI或AHB相连),因此不需要仲裁一些BUSREQ,GRANT,接口信号很简单。下图是一个典型的慢速APB Slave需要的接口。

AHB:

高性能(High performance)

并发操作(Pipelined operation)

支持多个总线主设备(Multiple bus masters)

支持突发传输(Burst transfers)

支持分段传输(Split transactions)

单个时钟边沿操作

APB:

低功耗(Low power),尤其在非外设总线活动时APB的接口零功耗

锁存的地址和控制(Latched address and control)

接口简单(Simple interface),控制逻辑简单,只有4个控制信号
适用许多外设(Suitable for many peripherals)
两个时钟周期传输

无需等待周期和回应信号

AXI:

AXI(Advanced eXtensible Interface)总线是AMBA总线架构中,最新并且性能最好的一个总线标准。

AXI的设计目标是可以在高时钟频率下运行,并在延滞时间长的状况下仍可达成高数据吞吐率。

AXI总线将读/写请求与读/写结果相互分离、将数据写入和数据读出的信号相分离,可以同时进行写入和读出动作,从而最大限度地提高总线的数据吞吐率。

相反AHB是半双工的,读和写不能同时进行,因此性能上比AXI一般来讲是要弱的。

握手协议:

AXI总线的master和slave的端口分为5个双向流量控制的通道,所谓双向流量控制是指发送端用valid表示数据是有效的,接收端用ready表示可以接受数据;

只有在vaild和ready同时为1时,数据才成功被传送。vaild/ready机制可以使发送接收双方都有能力控制传输速率。

突发传输

是指在同一行中对相邻的存储单元连续进行数据传输的方式,连续传输的周期就是突发长度(Burst Length,一般为4或8)。

在进行突发传输时,只需指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作,而不再需要控制器提供列地址。这样,除了第一笔数据的传输需要若干个周期,其后每个数据只需一个周期即可获得。