(待)vivado入门的入门经验,北航智能计算体系结构课程经验和感想

刚刚助教告诉我上一届有留经验,我没动力了。等我心情好再写8。

告诉大家,vgg16 15级有留代码,大家可以去git上找。

 

 入门的时候就是特别乱,后期就好了,大家要挺住!杨老师给分还是不错的(实话)。

 

 

 

 

文中没有技术细节,建议大家看着大思路,然后配合具体的教程学习。

2016级各lab任务如下:

  矩阵向量乘仿真(约3周),矩阵向量乘上板(2周),lenet(3周?),vgg16(6天(因为和编译、考期撞了,实际上应该是一个月左右)),没有团队作业。

 

  我基本上都没写完,主要是知识太杂,前两周没怎么分时间,后面的调试又因为经验少花了很多多余的时间。但是相信大家看完我的总结后都能写完。 

  我掌握的情况大概有:vivado开发流程;高效调试的经验;PS端SD卡读写、中断控制、DMA的demo;AXI-lite总线slave端的两种改法。

一、vivado软件本身的学习

  开发的基本流程:仿真、综合、布线、生成比特流、导出到SDK、SDK导出到开发板。

  可以这么理解:想要一个程序在板子上运行,需要硬件(因为是fpga)和软件两部分。

  在硬件上,如何让板子知道自己的电路被编成什么样了呢?用的就是vivado导出的比特流。比特流是根据verliog代码综合、布线得出的。其中,综合时把verliog代码转成硬件,这个大家计组已经学过了。布线,我个人理解是把综合出来的电路映射到开发板上,想一下烧板子的思路。最后根据布线的结果生成比特流,硬件看见简单粗暴的比特流就知道自己应该怎么烧了。

  在软件上,用到的是SDK软件编程。这个方面我不是很熟悉。基本上是编写c代码的程序,然后SDK软件给你编译成mips,导出到板子上的arm的代码区。这个过程大家学过计组也很熟悉了,就是往内存里写汇编指令。

  硬件部分称为PL部分,软件部分称为PS部分。

  vivado除了verliog文件外,还有一个叫约束的东西。约束就是指定你自定义的信号对应到物理的哪个部分。比如有个信号a想控制led等亮,如何让vivado知道a控制的是led呢?就要用约束文件,将led与a信号连接起来。这部分比较偏硬件,实验中基本用不上,可以跳过去。

  vivado中编写verliog的方法除了徒手编程外,还有一个拖拽连线的方法,diagram。画板就是把已经编好的模块摆到一起,然后将模块间的线连好。加入system(后面会说)的过程也是在画板上完成的。然后verliog可以自动根据连线生成verliog代码。

 

二、硬件开发部分

(1)diagram

  在哪里:

  

 

  本质:就是一个画布,可以像logisim那样手动连线和加模块(ip(类似库函数)和model(还没有封装成ip的,自己编写的verliog模块))。连完线后,vivado可以将画布转成verliog代码,后面用这个verliog代码完成后续的仿真等工作。

  小技巧:连线(按ctrl取消连续连线);删线(可以单独删去某端口的线,不用整体关联的都删)

  添加ip(就是已经编好的模块,后面会讲)

  添加model:

(2)ip

  IP:vivado中的ip就是已经编好的模块,可以直接用(天知道我第一节课听杨老师讲了一节课的ip有多迷茫。。。)。有别人编好的自带的ip,如加法器,乘法器,bram(存储器)。自己编好的verliog也可以制作成ip(相当于封装了一个硬件“函数”),下面是一些ip的使用事项

  BRAM:双口bram有两个时钟的延迟。设计的时候要看一下深度和宽度,防止存不下(前期应该都没问题)。

  乘法器:可以调延迟周期。会根据输入有推荐的延迟周期。

  system:

  自定义ip:

    方法:

    IP的修改:

    经验:不要急着封装成ip,因为改起来麻烦,还难保证正确性。使用add model。

   注意:IP和model更改后vivado会自己检测和更新接口等,不用手动删了重新加。

(3)仿真

  想办法仿真,每一步都是可以仿真的。

  子模块仿真:

  顶层仿真(数据通路,实际实现需要ps控制的):

 

三、建议每个lab完成的思路

  (1)弄明白网络结构,可以先看一下我对应的博客:

  (2)设计(最好避开中断,太麻烦了):

  (3)测试单个模块(尤其是设计PS端的协同,一定要设计demo):

  (4)数据通路

  (5)顶层仿真

  (6)编写PS

 

四、调试经验

 

posted @ 2019-01-16 19:35  iwanna  阅读(1382)  评论(0编辑  收藏  举报