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

这篇博客总结了《FPGA入门100例》用户在学习过程中遇到的问题,包括vivado软件操作、IP核调用、verilog编程、工具版本选择以及MATLAB与FPGA的结合应用等。详细解答了如何设置仿真时间、切换芯片类型、调用IP核,以及在FPGA学习中是否需要MATLAB等常见疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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教程吗?

问题17:有vitis或者HLS的教程吗?

问题18:博客中都是完整程序吗?

问题19:vivado2018版本可以用吗?

问题20:案例中有介绍硬件调试的课程吗?

问题21:FPGA入门100例中的部分案例和教程4中一样吗?

问题22:为什么我学习过程中建立的工程,当我设置别的芯片之后,IP核会出现警告,如何解决?

问题23:我本科毕业,下半年读研,请问博主我想利用暑假时间学习下FPGA,这个教程难度适合吗?

问题24:补充课程中关于ADDA的课程内容使用方法?


问题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,那么需要两块开发板才能完成测试。

<think>好的,用户想了解在Vivado中如何设置或优化仿真时间。首先,我需要回忆一下Vivado仿真工具和相关设置。用户提到之前使用系统函数时遇到问题,转而使用ModelSim,但希望直接在Vivado中优化仿真时间,可能涉及到减少仿真时间或提高效率的方法。 根据引用内容,用户已经接触过一些优化方法,比如多线程设置和增量综合,可能这些思路可以迁移到仿真优化。引用1提到Vivado和ModelSim联合仿真,但用户现在可能更倾向于使用XSim,所以需要专注于XSim的设置。 接下来,我需要检查用户提供的引用内容。引用2提到了使用TCL命令设置仿真参数,比如记录所有信号,这可能会影响仿真时间。但用户的问题是关于时间设置或优化,可能需要仿真时长或优化仿真速度。 可能的优化方向包括:仿真时间设置、减少仿真数据记录、优化测试激励、使用多线程仿真、以及利用增量仿真或缓存等。此外,正确设置仿真时长和精度也很重要,避免不必要的长时间运行。 需要确认XSim是否支持多线程,或者是否有相关的设置可以加快仿真速度。例如,减少记录的信号数量可以节省内存和处理时间。另外,测试激励的优化,比如避免复杂的循环或冗余操作,也能提升效率。 还要考虑仿真策略的选择,比如分阶段仿真,先进行快速功能验证,再进行详细时序仿真。同时,增量仿真可能复用之前的结果,减少重复计算。 需要检查是否有相关的TCL命令或GUI设置可以实现这些优化,比如设置仿真运行时间仿真精度、控制信号记录等。引用2中的TCL命令示例可能是一个起点,可以扩展其他参数设置。 最后,确保回答结构清晰,分点列出,并引用提供的参考资料。可能还需要生成相关问题,比如如何分阶段仿真或使用脚本自动化,以帮助用户进一步探索。</think>在Vivado中优化仿真时间,可以通过以下方法实现: ### 一、基础时间设置 1. **仿真运行时间设置** 在仿真脚本中通过`run`命令指定时间单位,例如: ```tcl run 100ns # 执行100纳秒仿真 ``` 或使用带参数的启动方式: ```tcl launch_simulation -runtime {1us} # 设置1微秒仿真时长[^2] 2. **时间精度控制** 在仿真设置中时间精度与时间单位比值,更高精度会增加计算量。建议在RTL级仿真使用`1ns/1ps`,时序仿真用`1ns/10ps` ### 二、性能优化方法 1. **信号记录优化** 关闭不必要的信号记录: ```tcl set_property -name {xsim.simulate.log_all_signals} -value {false} -objects [get_filesets sim_1] ``` 选择关键信号记录可减少40%内存占用[^2] 2. **多线程加速** 在非时序仿真中启用多线程: ```tcl set_param simulation.multithreaded 2 # 使用2个线程 ``` 3. **增量仿真** 复用前次仿真结果: ```tcl launch_simulation -mode post-implementation -scripts_only -simset sim_1 -absolute_path ``` ### 三、高级优化策略 1. **测试激励优化** - 采用定向测试替代随机测试 - 使用$fread替代逐周期信号驱动 - 减少不必要的时钟域交叉 2. **仿真模式选择** | 模式 | 速度 | 精度 | 适用场景 | |---|---|---|---| | 功能仿真 | 最快 | 无时序 | 初期验证 | | 时序仿真 | 较慢 | 精确 | 后期验证 | 3. **仿真缓存技术** 通过`cache_compile`命令保存编译结果,减少重复编译时间 ### 四、试技巧 1. **分段仿真法** 将长时仿真拆分为多个阶段: ```tcl run 50ns stop run 100ns ``` 2. **断点设置** 使用条件断点定位关键事件: ```tcl when {/tb/dut/state_reg == 4'hA} {stop} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值