实验对CPU的修改不多,如果完全按照RISC-V的要求设计CPU,将mul归类为R-Type的话,改动较多。但是我们可以单独设计一跟op_mul电线,然后单独设计乘法指令。

乘法指令的实现,直接使用其提供的乘法部件即可:

wire [31: 0] Result_MUL = RF_rdata1*RF_rdata2;
随后在选数里增加一项MUL的指令:
    assign RF_wdata = {32{op_shift}}&shift_result|{32{op_J_Type}}&PC_4|{32{op_lui}}&extend|{32{op_auipc}}&(PC_temp+extend)|{32{(op_I_Type|op_R_Type)&~op_shift}}&ALU_result|{32{op_lw}}&load_word|{32{op_lb }}& {{24{load_byte[7]}},load_byte}|{32{op_lbu}}& {{24{1'b0}},load_byte}|{32{op_lh}}& {{16{load_half[15]}},load_half}|{32{op_lhu}}& {{16{1'b0}},load_half}|{32{op_mul}}& Result_MUL;

并按照R-Type的指令设计,设计自动机的转移:

            `state_EX : beginif(op_B_Type)next_state = `state_IF;else if(op_R_Type|op_I_Type|op_U_Type|op_J_Type|op_mul)next_state = `state_WB;else if(op_S_Type)next_state = `state_ST;else if(op_L_Type)next_state = `state_LD;else next_state= `state_EX; end

其次是DNN相关的代码:
按照定义,需要设计几种中间变量:

    short bias;short num_out;//outputshort num_in;//inputshort y,x,ky,kx;short k_square=1+mul(weight_size.d2,weight_size.d3);short in_square=mul(input_fm_h,input_fm_w);

bias指的是偏移量,存在 F i l t e r [ i ] [ 0 ] [ 0 ] Filter\left[i\right]\left[0\right]\left[0\right] Filter[i][0][0]位置。
其次num_in和num_out分别是吗枚举读入的图片通道数和输出的特征图片通道数。
x、y枚举的是当前图像处理的像素点位置,kx、ky指的是每一次卷积操作的时候卷积核的相对位置。
k_square和in_square是计算下标的中间变量。
在设计out的赋值时我发现,其赋值规律是顺序的,所以可以设计一个outoffset来计算位置。

    int out_offset=0;short bias_offset=mul(rd_size.d1,k_square);

在第一重循环,枚举的是当前输出的通道数,在这一层可以计算bias的值。在第二层,枚举输入的通道数,随后枚举当前通道这张图片的像素点位置。在这种过程中,更据定义,需要增加当前图片间的步长Stride_X、Stride_Y。对于每个卷积核,其每个方块的由kx、ky两个块进行枚举。
在这里由于存在边界填充,所以存在一个pad的偏移,于是在这里需要作差的得到iw和ih。随后求出当前的像素值和卷积的权重,随后便可以计算卷积后的结果,在这里中间变量需要用32位整数存储。
在这里,值得注意的是16位定点数的符号位需要由32位定点数的符号位求出。最后,由于发现输出特征图的像素顺序是良序的,所以可以直接不断加1得到结果。
另外一个比较重要的步骤是池化操作,池化操作本质是取最大值,所以实现起来比较简单。

池化操作的计算也就是找到对应像素点位置,然后比个大小就可以了。注意到这里最大值max的初始值是0x8000,这在16位定点数里表示最小值,因此一定会被更大的数所替换。
硬件加速器就很简单了:

#ifdef USE_HW_ACCEL
void launch_hw_accel()
{volatile int* gpio_start = (void*)(GPIO_START_ADDR);volatile int* gpio_done = (void*)(GPIO_DONE_ADDR);* gpio_start =(* gpio_start )|0x01;while(1){if((*(volatile char*)gpio_done)&0x01)break;}return;
}
#endif

按照流程图,如果开始将对应位置低位赋值1,如果检测到结束位置低位赋值1就结束。

实验项目5.1 深度学习算法与硬件加速器相关推荐

  1. 腾讯云FPGA的深度学习算法

    由腾讯云基础产品中心.腾讯架构平台部组成的腾讯云FPGA联合团队,在这里介绍国内首款FPGA云服务器的工程实现深度学习算法(AlexNet),讨论深度学习算法FPGA硬件加速平台的架构. 背景是这样的 ...

  2. Python基于深度学习算法实现图书推荐系统项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在线推荐系统是许多电子商务网站的事情.推荐系统广泛地向最适合其口 ...

  3. 大数据基石python学习_资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!...

    原标题:资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段! 这是一份比较全面的视频教程,基本上包括了市面上所有关于机器学习,统计学习, ...

  4. 人工智能导论实验四:深度学习算法及应用

    实验四:深度学习算法及应用 一.实验目的 1.了解深度学习的基本原理: 2.能够使用深度学习开源工具: 3.应用深度学习算法求解实际问题. 二.实验要求 1.解释深度学习原理: 2.对实验性能进行分析 ...

  5. 一文梳理深度学习算法演进

    来源:https://zhuanlan.zhihu.com/p/464515049 作者:Peter潘欣 编辑:蘑菇先生 学习记涉及语音.图像.nlp.强化学习.隐私保护.艺术创作.目标检测.医疗.压 ...

  6. 回顾6年深度学习算法实践和演进

    作者:Peter(滑铁卢大学 计算机) 原文链接:https://zhuanlan.zhihu.com/p/464515049 本文转载自知乎,著作权归属原作者,如有侵权,请联系删文. 01 前言 如 ...

  7. 脑机接口的深度学习算法

    脑机接口的深度学习算法 脑电图控制是一种利用脑信号去控制电子设备和电路的非侵入式技术.目前,脑机接口系统提供了两种信号类型--原始信号和逻辑状态信号(用于开关设备).本文对脑机接口系统的性能进行了探讨 ...

  8. 走进人工智能|深度学习 算法的创世纪

    前言: 深度学习通过训练深层神经网络模型,可以自动学习和提取数据的特征,包括更准确的图像识别.自然语言处理.医学诊断等方面的应用. 文章目录 序言 背景 算法的创世纪 技术支持 应用领域 程序员如何学 ...

  9. 走心整理——十个常用深度学习算法

    十分抱歉,由于项目太忙(我会说自己懒吗?)柳猫一直没有更新自己的手记,现在,就让柳猫来讲讲十个常用的深度学习算法. 过去十年里,人们对机器学习的兴趣经历了爆炸式的整长.我们几乎每天都可以在计算机程序. ...

最新文章

  1. OPMS 1.2 版本更新发布
  2. 服务器对程序员来说意味着什么,此文带你来了解
  3. 手把手教你webpack3(3)入口(多入口)entry
  4. 载荷谱matlab,收获机车架载荷测试及载荷谱编制方法研究
  5. mysql数据库自动重新连接_mysql数据库自动重新连接
  6. 第四十九期:大牛总结的MySQL锁优化,写得太好了!
  7. 用pycharm搭建odoo 12, 11,10 开发调试环境
  8. mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)
  9. Window+Java环境证书生成说明,pfx证书已经生成
  10. java 静态初始化数据_Java 静态数据初始化的示例代码
  11. 教你如何打造网页爬虫工具(实现思路及源码下载)
  12. 饿汉式单例模式,懒汉式单例模式
  13. 8.1.CentOS7安装Spark安装部署及standalone模式介绍
  14. 电赛提升----风力摆控制系统
  15. 安兔兔html5测试跑分榜,2021年最新安兔兔手机性能跑分排行榜
  16. 解决双蛋问题的C代码实现
  17. linux用户motd,linux – 每个用户的SSH MOTD
  18. 超声波阵列功率驱动:利用MX1919驱动
  19. 基于AI的恶意样本分析(2)
  20. 用ThoughtWorks.QRCode生成二维码时出现“索引超出了数组界限”的错误

热门文章

  1. 飞速低代码:解放IT生产力,推动社会数字化转型的加速器
  2. 虹科带您了解HMI防爆认证
  3. 1905: 小明的糖果在哪里
  4. 家庭计算机网络的组网策略,如何组建一个家庭局域网
  5. 音视频基础之音频常见名词
  6. 用Arduino实现精准电池电量电压指示器
  7. 内部披露!最新大厂的薪资和职级一览
  8. 通信隔离 ---- 高速通信光耦的电路设计
  9. 科达获信息通信视频网络会议优秀领军企业奖
  10. Epicor客制化常用代码汇总(1)