FPGA技巧整理专栏
文章平均质量分 74
FPGA技巧整理专栏,包括一些常用的FPGA使用技巧,FPGA软件操作,IP核使用。这个专栏不涉及具体案例,只介绍写代码中的一些技术。
fpga和matlab
专业即算法,算法即数学,数学即万物。2007年开始从事MATLAB算法仿真工作,2010年开始从事FPGA系统/算法开发工作。擅长解决各种算法仿真、建模、通信、图像处理、AI、智能控制等各专业问题。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何通过vivado对一个FPGA工程进行性能评估
FPGA设计性能评估主要关注五大核心指标:最高运行频率(Fmax)反映电路时序性能极限,通过WNS计算得出;资源利用率统计LUT、BRAM等硬件资源占用情况,其中BRAM利用率70.36%需重点关注;功耗分析显示系统功耗为0.413W;传输延迟(Latency)指数据处理所需时钟周期数,需通过仿真或ILA测试获取;吞吐率体现单位时间数据处理能力,与数据位宽、时钟频率相关。这些指标相互关联,如降低Latency可能影响Fmax,需在设计优化时综合考量。评估时可通过Vivado工具获取各项数据,为设计改进提供量原创 2025-12-16 22:34:01 · 845 阅读 · 0 评论 -
Vivado——面向模块的个性化综合技术
本文介绍了面向模块的差异化综合策略配置方法。针对FPGA设计中不同功能模块的特性,提出了性能优化(PERFORMANCE_OPTIMIZED)和布线优化(ALTERNATE_ROUTABILITY)两种核心策略,前者适用于高速时序路径模块,后者适合易出现布线拥塞的模块。此外还介绍了低功耗、面积优先等可选策略。详细说明了在Vivado工具中通过Tcl脚本为特定模块设置BLOCK_SYNTH.STRATEGY属性的具体操作步骤,包括获取模块实例名称、设置策略参数等关键环节,并展示了实际应用效果对比。这种模块级综原创 2025-12-04 19:18:28 · 718 阅读 · 0 评论 -
基于Vivado平台的FPGA工程中DCP文件详解
DCP文件是Xilinx Vivado中的设计检查点文件,用于FPGA设计全流程管理。文章介绍了DCP文件的概念及其在综合、布局布线等阶段的应用,展示了不同阶段生成的DCP文件内容。重点讲解了两个应用场景:一是通过设置out_of_context模式生成封装DCP文件,二是利用DCP文件实现增量编译锁定,包括具体操作步骤和注意事项。DCP文件在FPGA设计协作、模块复用和知识产权保护方面具有重要作用。原创 2025-12-01 20:00:27 · 681 阅读 · 0 评论 -
vivado中如何查看各个模块的资源利用率
本文分析了FPGA设计中各模块的资源利用率情况,重点介绍了LUT与LUTRAM的区别,并详细说明了12种关键资源的功能特性。资源报告显示,顶层模块整体利用率较低,其中hdmi_color_bar模块为主要资源消耗者。文章特别解释了BlockRAM出现小数计数的原因,并区分了LUT作为逻辑和存储时的不同应用场景。随后系统性地阐述了包括SliceLUTs、SliceRegisters、BlockRAM、DSPs等在内的12种FPGA核心资源的功能定义和芯片总容量,为FPGA设计提供了全面的资源参考指南。原创 2025-11-30 15:55:12 · 1173 阅读 · 0 评论 -
Vivado综合布局布线多线程设置
本文介绍了在Vivado中设置线程数的两种方法:通过Tcl命令和图形界面操作。默认线程数为2,实验显示将线程数提升至16可使编译时间从1分51秒缩短至1分37秒,且工程越复杂效果越显著。文章还指出Windows系统下线程数设置需考虑CPU核心数(不超过1.5倍)和内存资源(每线程至少2GB)。合理配置线程数能显著提升芯片设计效率,缩短30%-60%的设计周期,但需结合系统特性和硬件资源动态调整。原创 2025-11-27 15:57:15 · 629 阅读 · 0 评论 -
vivado综合设置技巧分析3——-gated_clock_conversion
本文介绍了门控时钟的工作原理及Vivado工具中的转换设置。门控时钟通过组合逻辑控制时钟信号,在不需要工作时关闭时钟以降低功耗。Vivado的-gated_clock_conversion选项可将门控时钟转换为使能逻辑:首先检测门控时钟结构,然后将使能信号直接连接到触发器的使能端,并调整复位逻辑以确保功能正确。设置可通过GUI或Tcl命令完成。门控时钟可能导致毛刺、时钟歪斜等问题,且无法自动分配全局时钟缓冲器,通过转换可优化设计性能。原创 2025-11-24 17:44:35 · 464 阅读 · 0 评论 -
vivado综合设置技巧分析2——-keep_equivalent_registers和-resource_sharing
本文介绍了Vivado中的两个关键综合设置:1. -keep_equivalent_registers选项控制等效寄存器(共享相同输入端的寄存器)的优化处理,建议不勾选以自动优化无意产生的冗余寄存器;2. -resource_sharing选项管理算术运算单元的资源共享,提供auto/off/on三种模式,默认auto模式会根据设计需求自动优化加减乘法运算的资源复用。这两个设置分别针对寄存器优化和运算资源管理,合理配置可提升设计效率。原创 2025-11-21 23:16:44 · 425 阅读 · 0 评论 -
vivado综合设置技巧分析1——-flatten_hierarchy/-control_set_opt_threshold/控制集百分比计算
摘要:本文介绍了Vivado软件中-flatten_hierarchy和-control_set_opt_threshold两个重要综合参数的设置方法。-flatten_hierarchy参数控制设计层次优化程度,提供full、rebuilt和none三种模式;-control_set_opt_threshold参数用于优化同步信号控制集数量。文章还详细说明了控制集百分比的计算方法,通过report_control_sets命令获取控制集数量,再与芯片SLICE总数相除得出百分比。这些设置对FPGA设计的资原创 2025-11-20 23:01:09 · 663 阅读 · 0 评论 -
Vivado综合错误无提示以及仿真时错误无提示的解决方案
本文针对Vivado开发中两种常见错误提供了解决方案:1.综合错误无提示时,通过创建新的综合运行(synth_2)并设为活动状态解决;2.仿真错误无提示时,通过删除xsim目录下的临时文件夹解决。这两种方法均能有效处理Vivado工程中出现的异常错误提示问题。原创 2025-09-17 22:39:24 · 696 阅读 · 0 评论 -
Vivado Implementation Strategy介绍与学习
Vivado实现策略为FPGA设计提供针对性优化方案,主要分为五类:1)性能优化系列(如Performance_Explore)通过多种布局布线方法提升时序性能;2)拥塞优化系列(如Congestion_SpreadLogic)解决布线资源不足问题;3)资源优化系列(Area_Explore)减少LUT、FF等资源占用;4)功耗优化系列(Power_DefaultOpt)降低动态/静态功耗;5)运行时间优化系列(Flow_RuntimeOptimized)加速实现流程。建议先使用默认策略评估设计特性,再根据原创 2025-07-25 23:00:12 · 3465 阅读 · 0 评论 -
Vivado Synthesis Strategy介绍与学习
Vivado综合策略提供8种预设配置,针对不同设计需求优化:默认策略平衡性能与资源;高/中面积优化策略减少资源占用;高性能策略优先时序优化,含进位链专用版本;运行时间策略加速综合;功耗策略降低动态功耗。建议初期用默认策略,资源紧张选面积优化,高性能需求用性能策略,快速迭代选运行时间优化,低功耗场景用功耗策略。不同策略通过调整算法权重实现特定优化目标,需根据设计需求权衡选择。原创 2025-07-25 22:23:46 · 1736 阅读 · 0 评论 -
Vivado HLS开发流程简单介绍
本文详细介绍了Vivado HLS和传统FPGA开发流程,并对比了两种方法的适用场景。Vivado HLS允许使用高级语言(如C、C++)描述硬件行为,自动转换为RTL代码,适合算法密集型设计,开发效率高。其流程包括算法设计、添加优化指令、C仿真、C到RTL综合、RTL仿真、C/RTL协同仿真及IP核导出。传统FPGA开发则基于RTL级设计,流程包括需求分析、RTL代码实现、功能仿真、综合、实现、比特流生成及系统测试。选择开发方法时需考虑项目需求、团队技能、设计复杂度和迭代需求。两种方法可结合使用,以发挥各原创 2025-05-22 23:27:57 · 1099 阅读 · 0 评论 -
Vivado HLS优化指令使用方法总结
Vivado HLS是Xilinx公司开发的高层次综合工具,用于将C、C++或OpenCL代码转换为RTL代码。本文详细介绍了Vivado HLS中的几种关键优化指令。内核优化部分包括PIPELINE、INLINE和ALLOCATION指令,分别用于流水线操作、函数内联和并行实例创建。循环优化涉及UNROLL和LOOP_MERGE指令,用于循环展开和合并,以提高执行效率。数组优化部分介绍了ARRAY_PARTITION和ARRAY_RESHAPE指令,用于数组分割和结构重塑,以增强数据访问的并行性。此外,还原创 2025-05-22 23:09:37 · 1750 阅读 · 1 评论 -
Vivado锁定增量编译技术详解
在FPGA开发中,编译时间对效率影响显著,尤其是大型设计。Vivado提供的增量编译和锁定增量编译技术能有效减少重复编译时间。增量编译仅重新编译设计中的变化部分,而锁定增量编译在此基础上增加了对特定模块的锁定机制,确保这些模块在编译过程中不被修改,适用于需要模块稳定性的场景。锁定增量编译通过TCL命令配置,适用于团队协作开发,主工程师定义模块边界和锁定策略,各工程师在自己的工作区进行增量开发,最后集成时合并增量结果。这种技术显著提高了开发效率和团队协作的灵活性。原创 2025-05-21 23:41:00 · 1814 阅读 · 0 评论 -
Vivado中IP核被锁定的解决办法
IP核在Vivado中被锁定的原因主要包括Vivado版本差异、IP版本不匹配、IP许可证问题以及芯片型号不同。针对这些问题,可以采取以下解决办法:首先,通过生成IP核状态报告并升级IP核来解决版本差异和版本不匹配的问题;其次,使用TCL命令upgrade_ip [get_ips]来解锁IP核;再次,将工程另存为新的工程文件,以重新加载和识别IP核;最后,检查和更新IP许可证,确保许可证的有效性和正确配置。这些方法可以帮助开发者有效解决IP核被锁定的问题,确保工程的顺利进行。原创 2025-05-21 23:27:25 · 4920 阅读 · 0 评论 -
降低FPGA功耗的设计技巧
为了降低FPGA(Field-Programmable Gate Array)的功耗并提高其能效,我们需要深入理解FPGA的工作原理和功耗模型。FPGA的功耗主要由静态功耗和动态功耗组成。静态功耗是指电路处于非活动状态时的功耗,而动态功耗则是在电路工作时产生的功耗。原创 2024-08-06 14:02:48 · 2733 阅读 · 0 评论 -
一种自定产生CRC循环冗余校验码verilog程序简便方法。
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。②可检测出所有双比特的错;原创 2023-05-06 12:30:12 · 1723 阅读 · 0 评论 -
【小技巧】如何利用vivado对系统进行功耗分析
如图3-17所示,所设计的单核32位RISC-V处理器的系统总功耗为0.277W,其中,动态功耗(Dynamic)0.13W占系统的47%,静态功耗(Device Static)0.148W占系统的53%。在Vivado下,从综合后的设计到布局布线后的设计,其间产生的任何DCP文件都可用于功耗估计,如图 1所示。从这个图标可以看到,FPGA的功耗为4.392W,然后给出了各个部分的功耗,如Clocks,Signals,Logic,BRAM,DSP,MMCM等。原创 2022-12-13 01:03:16 · 13213 阅读 · 2 评论 -
【小技巧】vivado中功能仿真和时序仿真
在vivado中我们一般需要首先对程序进行功能仿真,其操作方法如下: 此时,功能仿真的效果如下所示:下一步,如果有需要,我们对程序进行时序仿真,此时,操作步骤如下:先进行综合布局布线操作: 然后进行时序仿真,操作如下: 可以看到,在完成布局布线之后,可以点击时序仿真,仿真结果如下:时序仿真和功能仿真区别,我们将上述仿真结果放大可以看到: 在两个数据的变化中间,会有一个0不稳态输出。这个也是实际FPGA开发过程中需要主要的问题。原创 2022-12-06 20:46:44 · 14234 阅读 · 0 评论 -
【小技巧】vivado编译时,提示149characters错误
将你的文件夹的名字改端点,就不会有这个错误了。原创 2022-12-01 00:20:50 · 1172 阅读 · 1 评论 -
FPGA中串口通信的时钟频率和波特率计数
波特率bandrate,指的是串口通信的速率,即串口通信时每秒钟可以传输多少个二进制位。比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒),波特率就是9600。串口的通信波特率不能随意设定,这是由于:第一,通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方个接受方按照不同的波特率通信则根本收不到,因此波特率最好是大家熟知的而不是随意指定。第二:常用的波特率经过了长久的发展,就形成了共识,常用的就是9600或者115200。...原创 2022-08-08 20:04:14 · 8074 阅读 · 0 评论 -
【小技巧】STA静态时序分析概述
STA的简单定义如下:套用特定的时序模型(Timing Model),针对特定电路分析其是否违反设计者给定的时序限制(Timing Constraint)。以分析的方式区分,可分为Path-Based及Block-Based两种。 先来看看Path-Based这种分析方式。如图一所示,讯号从A点及B点输入,经由4个逻辑闸组成的电路到达输出Y点。套用的Timing Model标示在各逻辑闸上,对于所有输入端到输出端都可以找到相对应的延迟时间。而使用者给定的Timing Constraint为: 1.讯号A到原创 2022-06-20 06:51:46 · 2591 阅读 · 0 评论 -
【小技巧】FPGA开发流程普通流程
可编程逻辑器件的设计是指利用EDA开发软件和编程工具对器件进行开发的过程。高密度复杂可编程逻辑器件(如FPGA)的设计流程如图1所示。它包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及下载等七个步骤。图1 可编程逻辑器件设计流程·设计准备 在系统设计之前,首先要进行方案论证、系统设计和器件选择等准备工作。设计人员根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。一般采用自上而下的设计方法,也可采用原创 2022-06-02 03:11:43 · 5622 阅读 · 0 评论 -
【小技巧】FPGA工程综合后出现WNS或者TNS小于零的问题处理
通常情况下,如果出现程序设计不合理,时序优化不到位等问题,vivado在布局布线之后,会出现WNS,TNS小于零的情况,如下图所示:当WNS和TNS较小时,对于一些低速的FPGA工程,可以忽略,不影响系统的工作性能,而当WNS或者TNS负数较大时,那么必须对其进行时序约束,否则会导致系统工作稳定性变差。具体操作如下:选择从中找到红色小于0的路径,然后鼠标右击,在弹出菜单中设置set_false_path,然后将产生的约束语句复制到约束文件中:FALSE PATH就是.原创 2022-05-30 22:16:22 · 15828 阅读 · 3 评论 -
【小技巧】Vivado锁定增量编译技术
为了实现对FPGA系统的place、route的锁定,只通过vivado中setting中的增量设置是不够的,这里需要加入锁定设计。其具体步骤如下:打开vivado软件,在弹出的界面中,选择如下菜单:选择已经被布局布线过的工程中的如下文件:打开之后,可以看到dcp文件的效果图: 打开后,在TCL Console中输入:“lock_design –level routing”,然后按回车,做完这一步后,设计就锁定好了,dcp文件就可以用了。这个步骤时间较长,需要耐心等待。.原创 2022-05-22 03:00:19 · 3625 阅读 · 0 评论 -
【小技巧】使用MATLAB产生一些重复性的verilog语句,加快verilog开发效率
在开发FPGA过程中,经常会遇到重复性的语句需要编写,而这些重复性的语句又不是完全重复的,而是有不同的编号。这个时候直接人工编程非常麻烦,这里分享matlab自动产生verilog的方法。close allfs=10000000;%采样频率%N=length(y);N=1024;%FFT点数size = 10 ;freq=(0:N-1)*fs/N;%频率轴t=linspace(0,2*pi,N);y=sin(t)'%产生单音信号q = quantizer('fixed...原创 2022-05-03 19:28:45 · 3168 阅读 · 0 评论 -
【小技巧】使用MATLAB读取quartusii中signaltapII保存的tbl格式数据文件
有的时候,我们需要将FPGA采集到的数据进行显示,通过MATLAB分析,那么需要读取FPGA的片上数据。我们以quartusii为例子,其片上数据采集到的文件格式为tbl文件,这个时候,我们编写如下程序来读取tbl文件。function data_dec = tbls(name);fid=fopen(name,'r');%文件的路径yy=fscanf(fid,'%s');fclose(fid);aa=find(yy=='='); %找出“=”的下标i=0;for j=1:length原创 2022-05-01 20:03:48 · 2037 阅读 · 0 评论 -
【小技巧】将图片数据导入到FPGA中进行相关操作
以quartusii平台为例子。首先看【小技巧】使用MATLAB产生coe文件和mif文件供FPGA调用方法整理_fpga&matlab的博客-CSDN博客_matlab读取coe文件得到图片数据的mif文件。比如,RGB彩色图片,将图片二维矩阵数据转化为串行数据,然后就会自动产生把这几个mif复制到fpga工程中,注意,目前图片大小均采用的是240*320,即高240,宽320,FPGA中参数基于这个设置的,所以测试的时候也要用这个大小。tops下面有三个ROM,分别是R.原创 2022-04-30 23:40:55 · 3302 阅读 · 0 评论 -
【小技巧】一种简单的办法在verilog中处理小数运算
很多情况下,我们需要在FPGA中处理小数,而不是直接量化。这里介绍一种自己以前常用的处理方法。感觉还不错,可以试试。我们定义一个二进制,总共12位宽:A1A2A3A4B1B2B3B4B5B6B7B8.其中A1A2A3A4为整数,B1B2B3B4B5B6B7B8为小数。做加法减法的时候,不考虑整数位位宽不够用的情况,那么可以直接相加:A1A2A3A4B1B2B3B4B5B6B7B8.+A1A2A3A4B1B2B3B4B5B6B7B8.这个就维持了加减法小数位不增加的原则。如果是乘法原创 2022-04-28 22:11:22 · 4430 阅读 · 0 评论 -
【小技巧】使用MATLAB产生coe文件和mif文件供FPGA调用方法整理
目前主流的FPGA,就是xilinx的FPGA和英特尔(原altera)的FPGA,在使用过程中,经常需要调用一些数据到ROM核中。下面总结下调用方法。1.产生coe,用于xilinx的FPGA:fid = fopen ('dat.coe','w');fprintf( fid, 'memory_initialization_radix=10;\n');%生成索引fprintf( fid, 'memory_initialization_vector =\n' );for i=1:length(原创 2022-04-27 00:50:33 · 6147 阅读 · 0 评论
分享