soc AXI接口术语和特性
AXI接口术语和特性
1、outstanding
2、interleaving
3、out-of-oder
4、写数据可以优先于写地址
5、大小端
小端:低地址数据放在总线bus的低位。
大端:低地址数据放在总线bus的高位。
6、INCR模式
INCR模式master只提供首地址,地址累加是slave端做的
7、原子操作
7.1、原子操作的用途
在多线程的操作系统中,都有一个获取线程锁的过程,这个锁是唯一的,一个线程抢到了其他线程就抢不到,如何实现这个功能呢?加入将内存的一个变量作为锁的标志,如果这个标志位0表示没有线程抢这个锁,如果为1表示某个线程抢到了这个锁。那么在抢锁之前先要看一下这个标志是否为0,如果为0表示锁是空闲的可以抢,为了表示抢到了这个锁,还得把这个变量置为1。这个抢锁的过程就至少需要有一读一写。但是在多线程操作的过程中,可能很多线程都在读取这个变量,都读到的值为0(读的时间还是比较长的,多核并发完全可以读多次),然后所有线程都写1,这样就造成了多个线程都得到了锁,与锁唯一的要求不合。也就是说通过软件手段是不能保证某个值被一个线程(Master)读取和写入的过程中没有被其他线程(Master)读取和写入。这就要求线程支持原子操作。
由于内存在使用过程中会出现ecc错误,需要刷新数据来纠正这些错误,操作系统通过内存巡检来完成刷新操作,内存巡检就是读取内存的值,通过ecc校验更正错误值,然后写入到内存,系统读取数据后,操作系统还是在正常运行的,内存上的程序很有可能把内部数据修改了,如果还是拿原来读取的数据ecc校验后写入就会冲掉程序保存的数据,这当然是不行的。这个时候内存巡检就要用到原子操作,巡检值使用exlusive方式读取内存,让这段内存记录在读取数据后内存数据有没有被改写过,如果被改写过,ecc校验后的数据使用exlusive方式写入的时候就会不成功,防止覆盖新的数据。巡检程序发现写入不成功就重新巡检这段内存,直到成功。
7.2、exlusive原子操作
Master_A以exclusive方式读取Salve的一段地址(以lane_cash为单位,一般为64byte)的值后,相当于Master通知slave监控这段地址的写,slave的一个moniter会纪录这个Master_A,如果Master_A在写入这个slave之前没有其他Master写过这个数据的话,Master_A往这段地址写入数据是会返回一个Exok即原子操作成功,指示数据正确写入;如果在Master_A写入数据之前有其他Master也往slave的这段地址写过数据,那么Master_A以exlusive写数据的操作会返回ok,这其实表示exclusive操作失败了,数据也被moniter阻挡没有写入到slave中。这样保证读写这一整个过程中,软件知道是不是只有一个线程(Master)在写这段地址(其他线程在这个过程可以读),也只有exlusive写返回Exok后才说明线程锁抢占成功,这样就只有一个线程能抢占成功。
是一种应用场景相关的操作,在多核CPU中,为了保证一个master对slave的访问操作不让其他master来访问,保证访问slave的数据不被其他master改写。有点像多线程中的线程锁。在AXI3.0的时候有normal access/exclusive access/locked access, 其中normal access是不进行任何干预的访问,exclusive则是slave端监控一下,在master访问期间有没有其他master访问过,如果访问过就给告警什么的,让master重新访问一遍。locked access这种模式在AXI 4.0取消了,即硬件锁定,其他master访问不了master到slave的总线,这种方式对性能影响很大,所以取消了。
8、cash
cash是slave端的一个缓冲,如果多个设备都访问slave的某一部分数据,那么这部分数据可以缓存到cash中,只要第一个master访问后,其他master访问则部分数据时就不去slave中去取这些数据,而是直接从cash中取出来,这样节省时间。axcash信号在总线中是透传的。在与AXI相连的CHI协议中实现实现了cash操作。
9、额外信号Qos/user
Qos和user在总线中也通常是透传,Qos有时候用于多个master访问的优先级用于仲裁。
10、应答信号:BRESP/RRESP
写操作单独有一个写应答通道;读应答RRESP与读数据集成在同一通道;
对于写操作,每个burst只有一个写应答BRESP,且必须在最后一拍写数据后产生;读操作每一拍数据都有对应的读应答信号返回;
11、ID
Master无需知道某个ID被其他设备使用了没有,应为interconnect会在Master的ID上额外添加8bit,来区分不同Master的ID。
12、低功耗操作
开启低功耗模式:Master拉低CSYSREQ信号,SLAVE收到后等SLAVE的任务处理完后拉低CACTIVE表示响应,并且在时钟关闭后拉低CSYSACK表示响应。
撤销低功耗模式:Master拉起CSYSREQ信号,SLAVE接收到以后拉高CACTIVE,解开时钟后,拉高CSYSACK信号。
原文编写与2019-12-05