集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

跟李凡老师学FPGA图像加速器之D03:加速器基础(20170427课堂笔记)

[复制链接]
 楼主| lcytms 发表于 2018-4-2 08:49:59 | 显示全部楼层
1001
        ACC有。
        acc_req。
        CPU有请求,ACC有请求。
        它请求,发给第三方的一个仲裁器,仲裁器根据唯一的仲裁策略,唯一申请者获得资源。
        当CPU有请求,而ACC没有请求的时候,判给CPU。
        当ACC有请求,而CPU没有请求的时候,判给ACC。
        这是仲裁器。
        所以说我们现在看见的架构呢,多出两根线,就是仲裁的请求线。
        仲裁有请求,而CPU和ACC都必须知道当前仲裁给谁,必须由仲裁结果的输入端口,有仲裁的请求线。
        主机,有仲裁的结果线。
        输入是arb_res。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 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。
        完成这样一个华丽的转身。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2018-4-4 09:16:09 | 显示全部楼层
1009
        就是说这个时候,在这个架构上,加速器就必定会有这么一个特定的问题,它必定会有FPGA和CPU,或者是嵌入式的处理器和加速器之间的资源的转换。
        因为这个时候资源必然会存在一仆二主、一仆多主,必然要进行 这种转换。
        这是必不可少的。
        仲裁器一旦完成这种转换,ACC将接管Memory资源。
        我们的问题,CPU这个时候就没有资源可用,CPU只能空闲。
        现在的嵌入式架构,CPU肯定还有其它的资源,它是多组件结构。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 02:48 , Processed in 0.067440 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表