lcytms
发表于 2018-4-2 08:49:59
1001
ACC有。
acc_req。
CPU有请求,ACC有请求。
它请求,发给第三方的一个仲裁器,仲裁器根据唯一的仲裁策略,唯一申请者获得资源。
当CPU有请求,而ACC没有请求的时候,判给CPU。
当ACC有请求,而CPU没有请求的时候,判给ACC。
这是仲裁器。
所以说我们现在看见的架构呢,多出两根线,就是仲裁的请求线。
仲裁有请求,而CPU和ACC都必须知道当前仲裁给谁,必须由仲裁结果的输入端口,有仲裁的请求线。
主机,有仲裁的结果线。
输入是arb_res。
lcytms
发表于 2018-4-2 08:53:43
1002
有资源的请求是输出的,有输入的仲裁结果。
判决结果的一个信息显示,必不可少,这是共性。
每一个加速器,小到我们现在做的长整,大到现在做的AI,人工智能。
人工智能现在很多方面需要FPGA配合,做什么呢?
CPU加速啊。
它都是这个架构,必不可少的。
还有一件事,如果CPU委托ACC来做长整,ACC这个过程我们再说一下。
lcytms
发表于 2018-4-2 08:54:26
1003
CPU原本是在Memory里面,取指执行。
当它遇见了一条执行长整运算的指令的时候,它原本是自己要一条指令一条指令地算。
现在有了加速器,它不必这么做了,它碰见要执行64位的长整运算的时候,这个时候CPU访问ACC,访问ACC的三个寄存器,至少需要3个寄存器。
第一,CPU要告诉ACC,位于Memory里面的8个字节的原始数据的基地址,起始地址。
因为有8个单元嘛,8个地址,64的源数据。
然后呢,我们执行长整运算,是把源和目标进行长整的加减乘除运算。
运算结果呢,跟CPU一样,再写回到目标区。
目标数据,也是64位。
也是由8个单元来安置的。
lcytms
发表于 2018-4-3 09:17:38
1004
那么,源数据也是8个单元。
所以说呢,这8个单元,我们就指示出它第一个单元的首地址,首地址你必须知道。
CPU肯定知道,源数据的首地址要告诉ACC。
目标的首地址也要告诉ACC。
地址是多少?
在我们这个练习里面,地址是16位的。
也就是说,这个寄存器,CPU要告诉ACC地址在哪?
它要把地址通过数据总线,访问ACC的从机寄存器,告诉ACC地址在哪。
如果是16位的地址,8位的数据总线,CPU要通过两次的data_out,才能够写出ACC的地址寄存器。
lcytms
发表于 2018-4-3 09:18:26
1005
所以说ACC的地址寄存器16位,是高字节和低字节。
同样还要有一个目标,因为你要把64位的源数据跟64位的目标数据进行运算,64位的目标数据也是8个单元。
也要指示出它的首地址。
首地址也是16位的。
8位数据总线也要通过两次写进去。
所以说如果要改成从机的地址,至少要有5个地址,是不是?
又有原始数据的高位字节的地址,因为字节是data,原始数据起始地址的高位,原始数据起始地址的低位。
然后目标数据的高位,目标数据的低位。
这四个,再加上一个状态寄存器,必不可少。
因为状态寄存器里面至少要有一个start。
lcytms
发表于 2018-4-3 09:20:07
1006
通过对这5个寄存器的访问,这个时候,ACC是以从机的形式存在的,跟Memory一样,CPU向这些地址发出确定的信息,数据在哪,目标在哪,然后呢,还有启动start。
那么,ACC获得启动命令,这个时候的连接关系,我们在word上做。
是CPU为老大,它是主机。
其它的这两个设备都是从机。
被CPU直接访问。
就是我刚刚擦掉的虚线。
ACC这就获得了启动命令,获得了start。
它可以执行长整运算,但是它现在还不能做。
因为当前的仲裁一定是给CPU的。
于是ACC必须要及时的发出仲裁请求,向仲裁器发出仲裁请求。
大鹏
发表于 2018-4-3 10:28:28
谢谢楼主分享,不错的资料,学习了!
lcytms
发表于 2018-4-4 09:14:17
1007
那么,如果CPU不让出资源来,ACC永远得不到memory。
所以说在我们的绿皮书教材里面,我们会用唯一的仲裁策略,这时候CPU要做一个事,要让出资源来。
所以CPU一旦委托ACC,启动ACC之后,CPU要主动地让贤,主动地将这个资源释放掉。
CPU释放资源,又委托它了。
而ACC又申请了。
根据唯一申请者获得资源的这个仲裁策略,那么仲裁器将会把仲裁结果判给ACC。
当仲裁结果判给了ACC以后,那么连接关系会是怎样的呢?
lcytms
发表于 2018-4-4 09:14:48
1008
也就是说,这个时候,ACC起主导作用。
ACC能够接管Memory。
Memory的地址接的是ACC的地址,命令接的是ACC的命令。
然后ACC要读memory,会把Memory的data_out接到ACC的data_in。
ACC要写Memory,会把ACC的data_out接到Memory的data_in。
完成这样一个华丽的转身。
lcytms
发表于 2018-4-4 09:16:09
1009
就是说这个时候,在这个架构上,加速器就必定会有这么一个特定的问题,它必定会有FPGA和CPU,或者是嵌入式的处理器和加速器之间的资源的转换。
因为这个时候资源必然会存在一仆二主、一仆多主,必然要进行 这种转换。
这是必不可少的。
仲裁器一旦完成这种转换,ACC将接管Memory资源。
我们的问题,CPU这个时候就没有资源可用,CPU只能空闲。
现在的嵌入式架构,CPU肯定还有其它的资源,它是多组件结构。