zl程序教程

您现在的位置是:首页 >  工具

当前栏目

读者学习过程中的一些问题总结——不定期更新

学习 总结 过程 更新 一些 问题 读者
2023-09-11 14:15:31 时间

  FPGA教程目录

本章内容主要是根据订阅《FPGA入门100例》用户学习过程中提出的一些常规的,通用的软件操作问题,以及部分通用的编程类问题进行总结,不定期进行更新

目录

问题1:如何设置vivado的仿真时间

问题2:如何将仿真波形设置为模拟波形

问题3:如何切换vivado工程的芯片类型

问题4: 如何调用生成的IP核

问题5:我是否可以用更高级的版本vivado,我是否可以用其他FPGA开发软件学习?

问题6:verilog编程过程中,一般截位是如何确定的?

问题7:VHDL/Verilog/system Verilog我应该先学哪个?

问题8:博主,system generator要学吗?未来会写相关课程资料吗?这方面好像资料很少。

问题9:我建立一个vivado工程之后,想把一些以前用到的IP核直接调用,具体怎么操作?

问题10:博主,学习通信案例的时候,怎么模拟发射和接收?

问题11:感觉学习FPGA过程中,大部分时候都需要借助matlab,那么我在学习过程中,如何同时学习FPGA和MATLAB?有必要专门学习下MATLAB吗?

问题12:第100个案例中,通过CNN识别手写数字,用的是标准的mnist数据库吗?

问题13:课程52里面的能量阈值是怎么设置的?

问题14:案例中的各种波形效果是怎么调试出来的,我调试出来的不太一样?

问题15:案例80中,costas锁定效果问题?

问题16:博主有写基于quartusii的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等常用软件。