本章内容主要是根据订阅《FPGA入门100例》用户学习过程中提出的一些常规的,通用的软件操作问题,以及部分通用的编程类问题进行总结,不定期进行更新。
目录
问题5:我是否可以用更高级的版本vivado,我是否可以用其他FPGA开发软件学习?
问题7:VHDL/Verilog/system Verilog我应该先学哪个?
问题8:博主,system generator要学吗?未来会写相关课程资料吗?这方面好像资料很少。
问题9:我建立一个vivado工程之后,想把一些以前用到的IP核直接调用,具体怎么操作?
问题11:感觉学习FPGA过程中,大部分时候都需要借助matlab,那么我在学习过程中,如何同时学习FPGA和MATLAB?有必要专门学习下MATLAB吗?
问题12:第100个案例中,通过CNN识别手写数字,用的是标准的mnist数据库吗?
问题14:案例中的各种波形效果是怎么调试出来的,我调试出来的不太一样?
问题21:FPGA入门100例中的部分案例和教程4中一样吗?
问题22:为什么我学习过程中建立的工程,当我设置别的芯片之后,IP核会出现警告,如何解决?
问题23:我本科毕业,下半年读研,请问博主我想利用暑假时间学习下FPGA,这个教程难度适合吗?
问题1:如何设置vivado的仿真时间
在vivado的仿真过程中,通过如下图设置仿真时间参数。
在这个界面里面,设置需要仿真的时间,然后点击上图中圈定的三角形,仿真时间就会在20us处停止。
问题2:如何将仿真波形设置为模拟波形
点击仿真之后,会得到数据结果,如下图所示:
然后通过如下方式将波形转化为模拟波形:
选择要显示波形的变量,如这里我们选择
然后右击,选择有符号十进制
然后 同时选中右击,选择波形显示
得到如下滤波效果:
问题3:如何切换vivado工程的芯片类型
打开vivado工程后,我们可以看到:
点击红色箭头的位置,会得到:
点击红色箭头的位置,会得到:
在这个界面里面,我们就可以设置不同的芯片类型了。
问题4: 如何调用生成的IP核
在vivado界面中,点击IP sources,然后选择想要调用的IP核:
选择iP核下面的veo文件,双击,会在右侧窗口弹出例化该IP核的接口调用语句,我们然后按普通的模块调用就可以了。
问题5:我是否可以用更高级的版本vivado,我是否可以用其他FPGA开发软件学习?
我们的案例,统一使用的是vivado2019.2版本,如果你的版本是vivado2020或者更高级版本,原则上也可以,但是可能对于部分包含IP核的工程会有一定的细小的偏差,比如某些IP核的IO配置和2019.2不一样。对于纯verilog开发的案例,则完全可以使用高级版本。
但对于纯初学者,我建议尽量使用一样的版本进行开发。
其他FPGA开发软件还有ISE和Quartusii等,对于ISE,也是xilinx的开发工具,目前xilinx已经暂停了对ISE的更新,最新版本是ISE14.7,其很多IP核接口和vivado中都不一样了。如果目前你还是使用ISE14.7,建议直接升级为vivado2019.2即可。
对于使用Quartusii的朋友,本教程的纯verilog开发的案例,可以自己建立响应的工程进行仿真测试,而对于使用IP核的工程,Quartusii软件则无法直接使用。
问题6:verilog编程过程中,一般截位是如何确定的?
位宽截取一般这样的:
假设我们有2个数据A和B,他们的位宽分别都是16位,即A[15:0],B[15:0],其中最高的2个bit为符号位,即A[15:14]是数据的符号位,A[13:0]为数据位,B也类似。
当A乘以B之后,我们将得到一个32位的数据,那么当多次数据乘法之后,位宽会越来越大,这个时候,需要对每一级的数据进行位宽截取。假设C = A*B,其位宽截取如下:
C2=C[29:14],这是由于2个符号位,其积则包含了4个符号位,因此最高位截掉2个符号位,使得数据结果C依旧保持2个符号位,而后面的数据,则按总位宽保持16位为准进行截取位宽。
问题7:VHDL/Verilog/system Verilog我应该先学哪个?
对于未来想从事算法类FPGA开发的朋友,建议选择verilog或者system verilog。本教程所用的编程语言,全部采用verilog编程实现,如果是0基础用户,可以先学习verilog。
问题8:博主,system generator要学吗?未来会写相关课程资料吗?这方面好像资料很少。
system generator建模方式和simulink相似,建立相同的系统之后,可以自动转化为verilog语言,然后在vivado中调用使用。本教程主要针对FPGA入门基础方面的学习,暂不介绍SG相关内容。未来在写FPGA/MATLAB/Simulink综合应用时,我会加SG方面的学习课程。如果有FPGA和simulink基础的朋友,SG还是非常容易上手的。但是对于一些大型复杂的系统,不建议使用SG。
问题9:我建立一个vivado工程之后,想把一些以前用到的IP核直接调用,具体怎么操作?
打开原来的vivado工程,看如下的路径:
.......\project_1.srcs\sources_1\ip
在你的工程中,打开如下文件夹sources_1中的ip文件夹,你可以看到:
(如上图所示,我自己建立的一个工程,有几个FIFO核)
你把这些IP核文件夹,全部复制到你的新的工程中,注意,如果新工程,你还没建立IP核,此时 sources_1中没ip文件夹,你自己建立一个ip文件夹即可,然后将用到的IP核文件夹全部复制到ip文件夹中。
然后再在vivado中,调用ip核文件夹中的*.xci
将xci文件进行调用,此时就可以在你的新工程中调用以前老工程中的IP核文件了。
问题10:博主,学习通信案例的时候,怎么模拟发射和接收?
在初学过程中,可以将发射和接收,放在一个板子里面。然后自己定义一个信道模型,加载收发模块之间。
这个信道模型,可以用matlab模拟一段高是白噪声随机数据,然后通过ROM调用,然后叠加到你的发射数据。
那么接收数据就是你的发射数据叠加了这段噪声数据。
如果有条件的同学,可以买2个带AD,DA扩展模块的FPGA板子,其中一个作为发射,通过DA输出,然后AD接收后,进行接收。
如果需要远距离传输,在AD,DA外面加天线或者射频模块,进行远距离传输测试。
问题11:感觉学习FPGA过程中,大部分时候都需要借助matlab,那么我在学习过程中,如何同时学习FPGA和MATLAB?有必要专门学习下MATLAB吗?
是的,由于FPGA的仿真直接是以数据流的形式输出的,在通信中,比如显示星座图,信号频谱,在图像中,显示数据流所对应的图像等等,这些借助matlab可以更加直观的看到FPGA程序的仿真效果。我们没有必要完全从零开始学习MATLAB,我们主要把几种常用的matlab读取FPGA仿真数据,并进行效果显示这个方面的相关程序先学会就可以了。
随着学习的深入,可以再逐渐学习MATLAB相关算法的理论仿真编程方法。
问题12:第100个案例中,通过CNN识别手写数字,用的是标准的mnist数据库吗?
用的是从mnist数据库中的提取的部分样本,因为我们的案例是仿真测试。全部进行测试,非常费时,案例中测试用的是任意10个的0~9图片样本,然后进行测试。
问题13:课程52里面的能量阈值是怎么设置的?
课程52里面,能量的阈值是根据输入样本的能量来设置的。因为在实际信号的处理中,输入的信号我们可以分为两种方式来处理:
假设输入信号是通过AGC调整之后处理的,那么信号本身的幅度恒定,那么阈值可以设置为一个固定值,比如有信号时幅度为1,没信号时幅度为0,此时阈值可以设置为0.5.
还有一种就是信号输入的幅度不稳定,也没AGC增益调整,那么可以根据输入信号的能量,做实时的统计,然后根据前段信号的能量统计结果,得到一个能量阈值,后续做实时的动态调整。此时能量阈值就是一个动态的值
问题14:案例中的各种波形效果是怎么调试出来的,我调试出来的不太一样?
vivado提供了丰富的波形显示方式,我这里的波形调试步骤如下:
步骤一,先设置数据为有符号十进制。
步骤二、然后设置波形类型:选择analog setting
步骤三、波形设置:
第一个100位显示波形的窗口大小。
Yrange,即纵坐标的刻度范围,比如一个波形最大值最小值为500,-500,那么可以设置Yrange范围是-1000~1000,保证能够覆盖波形最大值最小值即可
最后数据插值方式为hold。
问题15:案例80中,costas锁定效果问题?
默认的环路滤波器参数如下:我是通过移位来模拟环路滤波,实际测试过程中,可以通过调整环路滤波器的大小,来实现不同频偏的锁定问题。
问题16:博主有写基于quartusii的FPGA教程吗?
暂时没写,等simulink入门教程写完之后,会考虑写FPGA/MATLAB/Simulink综合教程系列,这个系列打算更接近实际应用,会设计各种软件应用,其中会介绍quartusii,modelsim等常用软件。
问题17:有vitis或者HLS的教程吗?
暂时没写,vitis和HLS目前暂时计划是未来的matlab,fpga混合应用提一下使用方法,没有打算按一个单独系列教程去写。未来主要计划介绍如何使用HLS做加速,用vitis做AI等工作。
问题18:博客中都是完整程序吗?
FPGA入门100例中,所有的案例,都是完整程序,读者按博客文章写的步骤,一步步学习操作,就可以获得博客对应的结果。所有的程序均在文章中给出,读者可以自己手敲输入,也可以复制到软件中直接运行。
问题19:vivado2018版本可以用吗?
本教程设计过程中,使用的是2019.2版本,对于其他版本,如果是verilog代码的课题,都是通用的,对于部分包含IP核的版本,据我所知,2018和2019大部分核参数配置都是一样的。在操作过程中,可以直接按教程上的IP核参数配置步骤进行操作。
问题20:案例中有介绍硬件调试的课程吗?
课程61~课程70是基于硬件开发板的调试课程和内容。而其他90个课程,如果学有余力,也可以自己尝试去下载到开发板中进行测试。
问题21:FPGA入门100例中的部分案例和教程4中一样吗?
这个不一样的,举几个例子,比如一些非常基础的入门案例或者基础操作方法,教程4中就不讲解了。比如入门100例中,一些调制系统,如ASK,FSK,QAM等,入门教程只介绍调制部分开发。教程4中,将学习完整的调制解调过程。同时还会扩展高阶调制等等。所以入门100例和教程4,虽然部分案例名字类似,但是内容是不同的。教程4总体难度略微大点。关于教程4的介绍,可以看如下简介:
★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例——前言-优快云博客
问题22:为什么我学习过程中建立的工程,当我设置别的芯片之后,IP核会出现警告,如何解决?
红色警告如下:
我们这里需要对IP核进行更新就可以解决,具体操作如下:
更新后如下:
问题23:我本科毕业,下半年读研,请问博主我想利用暑假时间学习下FPGA,这个教程难度适合吗?
这个教程作为本科到研究生阶段的FPGA学习,其难度比较适中,我编写的这100个案例,难度略微大于本科阶段的课本案例。有利于进一步提升FPGA的水平。如果有进一步提升水平的需求,也可以重点看教程4的相关内容。
问题24:补充课程中关于ADDA的课程内容使用方法?
ADDA课程,其由于涉及到具体的AD,DA芯片型号,所以这个课程,只介绍大概得测试方法,读者可以根据自己开发板厂家所提供的AD,DA驱动程序去测试。
另外,如果你的开发板,能同时接AD和DA,那么使用一块板子就可以了。
如果你的开发板接口,同时只能接一块AD或者一块DA,那么需要两块开发板才能完成测试。