【记录】与高JiaBao老师的聊天【2022-11-7】

一、前言

今天去学院309办公室和老师聊了聊。老师是做卷积神经网络的FPGA硬件加速方向的,本科和博士读的都是微电子专业,学习过程中都用到了FPGA,所以也就做这个方向。

二、科研

找文献

找国内文献的话,上知网和万方即可;找国外文献的话,可以上IEEEDPLP(Digital Bibliography & Library Project)。

国内研究现状

即使是发表在外文期刊上的文献,只要作者是中国人,那么就算作是国内研究现状。

引用

虽然引用别人的观点,但是每个人的表述角度都是不同的,只要能用自己的语言将自己的观点讲好,查重率在合理范围之内,合理引用,不算抄袭。

考研目的

我目前的想法是,带着对未来工作的目标与规划去考研、读研是比较好的。老师说,实际上在读研期间也会对自己的工作、方向有更清晰的认识

多读文章

如果海南大学的专业硕士仍然是两年学制的话,可能学到的东西就比较有限了,我自己感觉可能是第一年大家一起上课,第二年就要忙毕业的事情了,这样能经历的项目就很有限,所以我在考虑要不要读学术硕士。

读学术硕士我比较纠结自己的科研能力,因为害怕发不了文章毕不了业(信通学院学硕的毕业要求是一篇文章,专硕则无文章要求)。老师说,其实写文章最重要的就是研究背景,就是要多读文章。多读文章,才能明白别人研究的重点、缺点,才能知道自己要做什么样的方向。而且,要读顶尖期刊的好文章并且引用他们,这样审稿人看到你的文章中引用了非常多好文章,就会更认可你的工作,即你的工作是基于优秀的科研成果的,那么你的成果是优秀的几率自然更大。而且,多读文章是为了丰富自己所做研究的背景,用别人的文章铺垫、导出自己的研究方向,它们都是为阐述自己的观点与想法服务的。当研究背景写的非常有导向性、非常完备的时候,你的文章基本上就很容易被审稿人看中了(因为,如此完备的研究背景正体现出了学界缺少你这方面的相关研究,审稿人自然容易接受你的观点和研究成果)。

读研的重点

老师说,读研更重要的不是学习工具的使用,而是在研究的方向上前进。其实我本来就是抱着提升自己的工程能力的目标读研的,学习工程中使用的工具自然是我的重点,所以我觉得老师更多的是以从事科研的角度出发的。但是老师说的也没有错,因为你现在掌握的工具,将来并不一定完全用得到,学习的重点仍然是对工程实现全过程的理解与实操经验的积累,因此研究方向就显得尤为重要了,这才是自己在读研、科研期间发光发亮的舞台(这也是自己发展潜力的重要体现,一些公司是很看重这些的,比如芯原)。

三、学生思维

我现在作为一个本科生,确实很难说已经掌握了什么知识,但也不能只是认为读研究生只是换个学习的环境,更不能觉得自己只要再加把劲学习就可以在未来的就业市场具有更大的竞争力。

之前听别人说要摒弃“学生思维”,但是我一直不能理解,因为那是我以为学生思维没什么大不了的,既然我什么都不会、无法胜任可能的工作,那我就要多读书,等我学会了再去工作。

但实际上并不需要什么都学会了才能开始工作,更多的可以在工作中学习,这样掌握的知识反而更加到位。而且,千万不可把自己“关在小黑屋里”学习,应该多多打开自己的眼界、了解更多的知识,看到更多的方向、看到更多的现象与细节,才能帮助自己更好地调整学习的节奏与目标,以实现更高效、更有效的学习。

如果自己暂时没有实践的实践与机会,那么多向老师、行业中的人请教往往是最高效的,只要他们愿意分享,我觉得都是非常好的学习机会。

四、FPGA职业相关

Verilog

Verilog语言只是一个工具而已,你需要掌握它,但是不要抱着书啃。编程能力肯定是需要的,但是书只是用作参考,在真正的FPGA实现中,更重要的是你实现一个目标的逻辑思维,如何用更加好的硬件描述/编程来实现这个逻辑,满足其要求。

FPGA入门

一定要将完整的开发流程走一遍,跟着网上的教程使用Vivado和开发板就可以。无论多么大的工程项目,都是可以化繁为简、分割成许许多多小模块的,只要掌握了跑通小模块的经验,大模块就是量的增加了。主要是一定要构建起整体的工程思维。

钻研细节

其实想从事FPGA、数字IC方面的工作,就需要将知识学精、学细,很多看起俩无关紧要的事情,实际上蕴含很多技术细节。比如在上个学期做的抢答器课程设计中,我写了不同功能模块的verilog代码,并用一个顶层模块将他们连接起来。但实际上这种接口连接非常的简单,基本上没有考虑到数据的传输效果。如果做的是高频信号的传输,那么FPGA芯片的引脚就必须考虑信号的传输时延。对于高速信号而言,走线的长度往往会因其寄生电阻和寄生电容的变化,进而对信号的传输造成延迟(滞后),不同长度的信号线其延迟也是不同的。所以,当多位的高速信号传输至FPGA芯片时,必须对输入信号进行相关的延时处理(统一输入信号的时序),否则就会导致数据传输的混乱。这样需要考虑的内容就很有深度了。

实际上,老师在做的更多是FPGA各模块的功能仿真(理想状态,无门级延时),没有深入到非常详细的时序验证(有门级延时),因为基本的设计通常可以留有充足的时间裕量,最终部署到FPGA芯片后的运行结果也是符合要求的。所以,功能仿真后更多的是查看仿真的时序波形图,必须满足设计功能的要求。

可以多查看综合后的门电路,比较不同的verilog代码综合后使用的逻辑门资源延时级数,这样在以后编写verilog代码时脑海中就会对最终部署的电路以及时序效果有基本概念,对之后的设计与优化很有帮助。这也是为什么我当时看网上的经验分享说,有经验的FPGA/数字IC设计工程师,一看到verilog代码就知道会生成什么样的逻辑电路了。

FPGA和数字IC设计

我问老师,以后从事FPGA或数字IC设计需要重新打微电子、半导体物理方面的基础吗,老师说不必。

FPGA和数字IC设计其实很相通,他们就是使用的脚本软件存在不同而已,整个设计的流程几乎是一样的。

五、毕业设计

对于我的毕业设计,老师说,对输入FPGA的特征权值有两个优化的主要方向:一是量化处理,将浮点数(32bit)转化为定点数(8bit),并且调用片内的DSP资源进行并行运算。由于FPGA的逻辑资源难以用于运算处理,所以采用DSP资源;很多人运用DSP资源只是运用了它们高效的乘法运算性能,但实际上DSP也是可以做到加法运算的,所以可以将这两种运算进行组合,以并行的方式做出流水线的效果。二是,可设定阈值进行二值化处理,用一个逻辑位进行运算,这样可大大减少运算量。甚至可以进一步使用两个逻辑位的三值化处理,以提高处理精度。

其实还可以在图像数据的输入上做一些优化。在进行特征值提取时(卷积、池化)卷积框可以是3x3并且按位移动的(一位或是两位),这样输入的数据便会有重复。如果每次卷积框移位,都将所有数据重新读入,那么将会做非常多的重复工作,若可通过硬件编程将重复的数据进行缓存,那么可极大提升处理的效率和片上存储空间的利用率。

还可对网络实现硬件上的“剪枝”。当通过高级语言(如Python)进行卷积神经网络的建模时,往往会生成一些不必要的或是对最终处理精度影响甚微的神经网络节点,此时便可以采用剪枝的方法将他们去除。但是软件剪枝和硬件剪枝的不同之处在于,硬件剪枝可直接通过数值的比较,将不需要的数值进行确定并直接屏蔽其后的运算电路,因而其效率是高于软件剪枝的。

六、结语

和老师聊了很多也聊了很久,足有一个多小时,真的非常感谢老师的分享。内容很多,我脑子不太够用,也就记下了这么些,还是非常受用的。

posted @ 2022-11-07 19:24  U羊U  阅读(137)  评论(0编辑  收藏  举报