
FPGA
文章平均质量分 63
jk_101
不停的学习。
展开
-
FPGA时序约束-汇总篇
FPGA时序约束理论篇FPGA时序约束理论篇-时序路径和模型FPGA时序约束理论篇-Skew讲解FPGA时序约束实战-I/O口约束FPGA时序约束实战-时钟周期约束原创 2023-12-25 19:53:21 · 391 阅读 · 0 评论 -
异步FIFO设计之格雷码
相邻的格雷码只有1bit的差异,因此格雷码常常用于异步fifo设计中,保证afifo的读地址(或写地址)被写时钟(或读时钟)采样时最多只有1bit发生跳变。在不考虑路径延时的情况下,因为源数据(读写地址)只有1bit变化,即使发生了亚稳态,最终的结果相当于被目的时钟延迟一拍采样。需要注意的是:异步fifo中使用格雷码无法避免亚稳态,它起到的作用是,即使发生了亚稳态,依旧能够保证异步fifo的功能正确。转载 2023-12-20 14:25:45 · 611 阅读 · 1 评论 -
FPGA的进阶之基于XADC的FPGA内部温度采集
参考链接:FPGA的进阶之基于XADC的FPGA内部温度采集转载 2023-12-09 10:50:44 · 747 阅读 · 0 评论 -
FPGA | Vivado 查看最大工作频率(Fmax)
论文或者技术文档中经常出现 Fmax 参数,但在 Vivado 的 Timing Summary Report 中无法直接找到。原文链接:https://blog.youkuaiyun.com/qq_43580646/article/details/122588087。版权声明:本文为优快云博主「一只殿鹿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。Vivado 通过 Timing Summary Report 查看 Fmax。转载 2023-12-08 10:00:00 · 2222 阅读 · 0 评论 -
10G以太网接口的FPGA实现,你需要的都在这里
参考链接:10G以太网接口的FPGA实现,你需要的都在这里 - 知乎原创 2023-11-27 11:00:33 · 452 阅读 · 0 评论 -
FPGA程序前仿真和后仿真问题处理
参考链接:FPGA程序前仿真和后仿真问题处理 - 知乎原创 2023-11-24 17:29:04 · 510 阅读 · 0 评论 -
如何减少时序报告中的逻辑延迟
参考链接:如何减少时序报告中的逻辑延迟原创 2024-01-10 18:11:46 · 418 阅读 · 1 评论 -
异步复位同步释放与同步复位打拍
参考链接:复位系列之异步复位同步释放与同步复位打拍原创 2023-11-19 21:16:44 · 112 阅读 · 0 评论 -
Verilog中`include的用法
例如只写成 `include "timescale.v" 是不行的,要使用绝对路径,如 `include "F:/Test_prj/rtl/timescale.v"。在QuartusII或者Vivado等其它FPGA编译平台时会使用include文件的情况,但是这样就会涉及到路径问题,如果不添加文件路径,编译时会报错误。`include "../src/include/timescale.v"或`include "src/include/timescale.v"原创 2024-03-18 11:03:26 · 2979 阅读 · 1 评论 -
Verilog语法中+:和-:用法
1. 大端序:比较常用,如reg [31:0] value, 高位在左边,低位在右边。2. 小端序:不常用,如reg [0:31] value,低位在左边,高位在右边。1. base_expr表示起始bit。2. width_expr表示位宽。位选择等效如下代码。转载 2024-05-21 11:07:25 · 2959 阅读 · 1 评论 -
了解FPGA中的BRAM
RAM是Random Access Memory,也就是随机访问数据存储器,RAM的内部是一个一个小内存单元(可以看成是一个小格子)组成。每个内存单元都对应一个地址编号。当我们需要读写数据时,就访问对应的内存单元地址,很快地把数据写入或者读取出来。转载 2024-05-06 08:58:03 · 140 阅读 · 1 评论 -
FPGA设计Verilog基础之数据类型的作用和特点、常量和变量的代码示例详解
以下将详细介绍FPGA设计中Verilog数据类型的定义、作用、特点和详细的代码示例。转载 2023-06-21 10:00:00 · 5499 阅读 · 1 评论 -
为FPGA设计添加复位功能的注意事项
本文将探讨在 FPGA 设计中添加复位输入的一些后果。本文将回顾使用复位输入对给定功能进行编码的一些基本注意事项。设计人员可能会忽略使用复位输入的后果,但不正确的复位策略很容易造成重罚。复位功能会对 FPGA 设计的速度、面积和功耗产生不利影响。在继续我们的讨论之前,有必要强调一个基本原则:FPGA 是可编程设备,但这并不意味着我们可以对FPGA 中的每个功能进行编程。这一基本原则将在本文的其余部分进一步阐明。转载 2023-05-26 11:02:42 · 581 阅读 · 0 评论 -
Vivado自定义IP核
在Vivado中,IP核包含可配置、可生成和可定制的模块,通过IP Integrator工具集成到设计中,简化了硬件设计流程。使用Vivado提供的IP核可以减少设计时间和成本,但是并不是所有的需求都能够满足,有时候需要设计自定义的IP核以实现特定功能或加速系统性能。使用自定义IP和xilinx官方IP的方法一样,但如果在其他的工程里面使用封装好的ip核,还需要将ip核文件添加到ip核库里面。Review and Packaga 可看到IP核的信息,点击 "Package IP" ,ip核已经封装完成。转载 2023-05-14 19:42:53 · 2488 阅读 · 0 评论 -
vivado中IP核的Core Container特性
如果只想打包单个IP核,在Sources窗口的IP Sources标签下,在对应IP核的右键菜单中,选择“Enable/Disable Core Container”,来启用或禁用Core Container功能,如下图所示。在Vivado中生成 IP核时,一般默认是对应的IP核文件夹会生成在工程目录的.srcs/sources_1/ip路径下。在项目Settings中的IP标签下,选中“Use Core Containers for IP”(默认为不选),这样工程中的所有IP核都会被打包为XCIX格式。转载 2023-05-15 08:40:47 · 1500 阅读 · 0 评论 -
Vivado自带仿真器:真的不好用吗?
WDB文件用于存储仿真数据,如果想查看上次仿真的结果,那就通过开启静态仿真模式,Vivado Simulator会从WDB文件中读取数据并显示,操作步骤为:“点击Flow菜单下的Open Static Simulation,选择WDB文件”。波形窗口是Waveform的核心部分,包括了信号名、信号值和波形,展示了各个信号的时序波形,并支持缩放、平移、时间轴调整、垂直比例等操作,以便更好地查看波形结果。具有方便易用的界面,可以进行波形缩放、平移、时间轴调整、垂直比例等操作,以便更好地查看和分析波形结果。转载 2023-06-26 10:42:12 · 1891 阅读 · 0 评论 -
vivado HDL编写示例
根据移位寄存器的长度不同,在综合时会选择采用一个 SRL 类型原语,或采用级联的 SRLC 类型原语进行实现。报告检测出的锁存器(Latches),这些锁存器是由组合逻辑HDL代码设计错误引起的,比如if或case状态不完整。寄存器是一种广泛使用的存储器件,可以在时序逻辑中存储多个比特位,通常由触发器或D触发器等逻辑单元实现。Vivado综合时会根据实际情况,确定是用LUT实现,还是用DSP实现,建议使用乘法时,计算结果输出多打两拍,有助于改善时序。常见的触发器有D触发器、JK触发器、T触发器等。转载 2023-05-08 08:38:59 · 1288 阅读 · 2 评论 -
Vivado:ROM和RAM的verilog代码实现
RAM设计方式有很多,可以用BRAM、LUT、分布式RAM、URAM实现,可以使用RAM_STYLE属性强制规定使用的资料类型。(*rom_style = "distributed" *)表示用分布式 RAM实现。No-Change模式:新内容载入时,不读取该地址的内容(即维持之前的值不变);(*rom_style = "block" *)表示用Block RAM实现。(*rom_style = "uram" *)表示用uram实现。(*rom_style = "reg" *)表示用寄存器实现。转载 2023-04-24 14:46:53 · 2925 阅读 · 1 评论 -
Vivado如何清理工程,并避免缺失必要的文件?
1、dcp文件,dcp文件是Design CheckPoint的缩写,中文翻译为“设计检查点”,它是一种加密的、压缩的二进制文件类型,包含了完整的设计信息,如实例化层次结构、资源使用情况、时序分析数据、约束等重要信息。如果是使用vivado仿真器仿真,在仿真的过程中,将会产生很多数据缓存,将大量占据磁盘空间,在关闭仿真后,可以通过reset_sim这个TCL命令,用来清空项目的仿真目录下文件。但要注意,在系统的temp文件夹中,可能也与仿真文件缓存存在,如果发现系统C盘的空间越来越小,可以定期清理下。转载 2023-06-27 08:47:12 · 2819 阅读 · 0 评论 -
xilinx FPGA在线调试方法总结(vivado+ila+vio)
A、在原理图(block design)右击添加“Mark Debug”,工程综合后,在SYNTHESIS > Open Synthesized Design,在Netlist窗口中选择需要调试的网络节点,进行调试。根据实际的输出结果表现,来推测可能的原因,再在模块中加ILA信号,设置抓信号条件,逐步定位问题模块和原因,最终解决bug。第4步:在IP source区,打开ILA,添加例化模板, 在代码中插入例化,把VIO的输出口连接到模块的输入。第3步:在代码中插入例化,把VIO的输出口连接到模块的输入。转载 2023-04-04 08:38:25 · 4059 阅读 · 0 评论 -
不可不知的FPGA内部结构
布线资源类似绘制PCB板时的连线资源,是为了能够让位于FPGA不同位置的逻辑资源块、时钟处理单元、BLOCK RAM、DSP和接口模块等资源能够相互通信,从而协调合作,完成所需功能,连线的长度和工艺决定了信号在连线上的驱动能力和传输速度。锁存器因为不需要时钟,所以不是时序元件,它对毛刺无过滤功能,非常敏感,容易出问题,在很多情况下都是要避免使用的。(1)一个预加器(加法器),实现的是A(最大位宽30)与D(最大位宽是25)的相加,输出的结果最大位宽为25,该预加器不用的时候可以选择旁路掉。转载 2023-04-06 10:00:00 · 1473 阅读 · 0 评论 -
FPGA学习网站、开源网站和论坛网站汇总
HDLBits有一系列的 Verilog 基础知识,可以在线仿真的学习网站,题目很多,内容丰富,包括了 Verilog 的基础语法、时序电路和组合电路、基础电路和测试激励等等。牛客网是一个综合类刷题网站,包含了Verilog基础题、进阶题和面试题,题目挺丰富,可以在线仿真和对比结果。现在很多做开发板的公司都开源了部分开发板的教程和源代码,不管有没有买开发板,大家可以下载下来,学习和参考都行。米联客做开发板的,专业开发论坛,开源了学习资料和代码,可以学习和参考。数字IC论坛,里面有FPGA开发类板块。转载 2023-04-08 10:00:00 · 2597 阅读 · 0 评论 -
verilog的阻塞赋值和非阻塞赋值“轻松掌握”
其实阻塞赋值和非阻塞赋值理解起来很简单。大家只需要always@(posedge clk)块中使用非阻塞赋值”转载 2023-04-10 08:00:00 · 675 阅读 · 0 评论 -
verilog常用系统任务和函数
参数说明:file_path/file_name为文件路径,mem是存储数组或寄存器变量 ,start 为起始地址,end 为结束低至。参数说明:mem是存储数组或寄存器变量 ,fp为文件指针,start 为文件起始地址,count 为读取长度。重定位函数,offset 为偏移量,type 为偏移参考地址,0表示文件起始位置,1表示当前位置,2表示文件末尾地址。$fdisplay等函数是将数据写入到指定文件中,第1个参数是文件指针,第二个参数是写入数据格式,第3个参数是写入数据。$feof(fd);转载 2023-07-03 08:53:40 · 2710 阅读 · 0 评论 -
verilog编程艺术(提升代码灵活性)
Verilog中的generate语句可以生成重复结构的代码块,例如模块实例、寄存器或电路组件等等,在设计大型系统时非常有用,可提高写代码效率。localparam用于模块内部定义常量,特别是模块名已定义了parameter属性时,模块内部使用常量,需要用localparam来定义。Verilog中的function语句是用来定义函数的,通常用于执行一些重复的操作,例如计算逻辑等等。casez语句中,如果分支表达式某些位的值为高阻z,那么就忽略这些位的比较,而只关注其他位的比较结果。转载 2023-04-17 10:32:32 · 482 阅读 · 0 评论 -
Verilog常用运算符及表达式
c > 1 ,表达式中最大位宽只有8bit,因此d0+ d1的中间结果也是8bit(丢掉进位后的17),这样不能起到保留最高有效位的效果。d > 1,表达式中多了一个未声明位宽的常数0,其默认位宽为32bit,这样加法的中间结果便不会丢掉进位。其使用方法如下:。'b1 : 'b0;(1)如果只涉及到加法和减法,负数与表达式中最大操作数的位宽必须保持一致,如下处理:。=)、大于等于(>=)、小于等于(转载 2024-05-07 09:52:50 · 8402 阅读 · 4 评论 -
TestBench内容编写与方法总结
1、不要设置无意义的高精度,时间精度越高,对应的仿真所消耗的资源和时间就越多,比如“`timescale 1ns/1ps”,一般仿真时不需要精确到ps级,所以只需要设置成ns级就行,比如“`timescale 1ns/1ns”。表示打印的时间值的单位, 0 表示秒,-3 表示毫秒,-6 表示微秒,-9 表示纳秒, -12 表示皮秒, -15 表示飞秒;-10表示以100ps为单位。$stop表示暂停仿真,当程序仿真执行到该语句时,仿真会暂停,常用于抓取仿真过程中出现错误状态时,或检测某个信号时,暂停仿真。转载 2023-04-02 10:00:00 · 386 阅读 · 0 评论 -
verilog数据类型和数组
Verilog-2001 标准引入了signed 和 unsigned关键字,在Verilog-2001标准发布之前,所有net类型和variable类型都只能用于存储无符号(Unsigned)数据类型。verilog 中最常用的net类型就是wire类型。representation:进制, b或B表示2进制,o或O表示8进制,d或D表示10进制,h或H表示16进制,可省略,则默认是十进制。verilog中最常用的变量类型是reg类型,用于always语句块内,如下面的代码片段所示,实现了一个D触发器。转载 2023-05-12 10:59:04 · 3769 阅读 · 0 评论 -
FPGA边沿检测及应用示例
在这个代码示例中,我们定义了一个testbench,包括输入信号clk、reset和signal,以及边沿检测模块uut,编写了测试逻辑,可以测试该模块的性能和正确性。Verilog边沿检测可以通过posedge、negedge和edge等敏感表达式来实现,其基本原理是通过触发器检测输入信号的状态变化,并触发相应的逻辑操作。在这个代码示例中,我们定义了一个边沿检测模块,包括输入信号clk、reset和signal,以及输出信号period和duty_cycle。三、Verilog边沿检测的代码实现。转载 2023-03-29 10:00:00 · 1174 阅读 · 0 评论 -
TestBench内容编写与方法总结
1、不要设置无意义的高精度,时间精度越高,对应的仿真所消耗的资源和时间就越多,比如“`timescale 1ns/1ps”,一般仿真时不需要精确到ps级,所以只需要设置成ns级就行,比如“`timescale 1ns/1ns”。表示打印的时间值的单位, 0 表示秒,-3 表示毫秒,-6 表示微秒,-9 表示纳秒, -12 表示皮秒, -15 表示飞秒;-10表示以100ps为单位。$stop表示暂停仿真,当程序仿真执行到该语句时,仿真会暂停,常用于抓取仿真过程中出现错误状态时,或检测某个信号时,暂停仿真。转载 2023-03-27 10:00:00 · 769 阅读 · 0 评论 -
Vivado逻辑分析仪使用教程
不同之处在于,“Debug Cores”选项卡是一个更加以ILA IP核为中心的视图,所有已标记为“Mark_Debug”的信号并且已经被分配到ILA探针的信号都会被显示在各个ILA IP核的视图树下,已标记为“Mark_Debug”的信号但是还没有被分配到ILA探针的信号被显示在“Unassigned Debug Nets”下,当然也可以在其中查看和设置ILA IP核的各种属性和参数。这样,在顶层的设计迭代过程中,OOC模块就不必跟随顶层模块,而进行一次次的会产生相同结果的多余的综合了。转载 2023-03-11 09:19:37 · 3246 阅读 · 1 评论 -
FPGA学习-SDRAM
进入空闲状态后,至少需要执行两个周期的自动刷新命令,自动刷新命令完成之后,就可以对 SDRAM 进行加载模式寄存器了,因为模式寄存器上电后处于未知的状态,因此在执行任何的操作命令之前必须加载模式寄存器,在需要的时候,在模式加载完成后可以执行两次自动刷新命令。和其他芯片比,比较少见的是时钟使能引脚、数据掩码的概念。2.对于 SDRAM 的读写是以突发的方式进行的,即对 sdram 的获取(读或者写)是从一个指定的地址开始,并按照编程好的数量(长度,即很多手册中写到的BL)的地址,以编程好的数据顺序读写数据。转载 2023-03-15 08:37:28 · 1458 阅读 · 0 评论 -
Force Up-to-Date功能
在Vivado使用过程中,会碰到如下情况:设计代码已经编写完成,且仿真、综合或实现中的某一步骤已经通过,不需要再修改。此时可能需要添加一些注释代码,或者调整代码的格式,而任何修改都会导致状态更改为“Out of date”,提示用户更新设计。如何才能在不重新运行综合或实现的情况下解决这个问题?转载 2023-03-10 09:28:19 · 362 阅读 · 0 评论 -
FPGA的配置方式
本来讲一讲FPGA的重构,在说FPGA重构之前,需要先了解FPGA的配置方式。转载 2023-02-18 14:49:40 · 1572 阅读 · 0 评论 -
Vivado两种生成、固化烧录文件
A选择当前flash的大小,注意这里是MB,不是Mb。B选择要生成的固化文件的保存路径,设置名字。C选择当前芯片的烧录方式D选择已经生成的bit文件。E勾选所有。转载 2023-02-21 19:00:15 · 4370 阅读 · 1 评论 -
Xilinx 7系列时钟结构详解
来源:瓜大三哥xilinx 的 FPGA 时钟结构,7 系列 FPGA 的时钟结构和前面几个系列的时钟结构有了很大的区别,7系列的时钟结构如下图所示。Clock Region:FPGA 内部分成了很多个时钟区域。Horizontal Center:FPGA被 Horizontal Center 分成上下两个部分,每个部分包含16个 BUFG。Clock Backbone:全局时钟线的主干道,将 FPGA 分成了左右两部分,所有的全局时钟布线均要从此经过。转载 2023-02-24 10:00:00 · 1339 阅读 · 1 评论 -
将自定义 IP (HDL)添加到 Vivado 模块设计(Block Design)
不用于仿真目的的自定义 RTL(即测试文件)都被视为 Vivado 中的设计源。使用 Flow Navigator 中的Add Sources选项并选择Add or create design sources ,然后单击 Next。转载 2023-02-22 10:00:00 · 5406 阅读 · 13 评论 -
理解SoC时钟设计
时钟是同步数字系统的核心。SoC中的所有事件都由时钟的活动边沿控制,时钟频率通常与吞吐量和性能同义。时钟的分布是一个有趣的问题,涉及大量的设计权衡。设计人员需要了解权衡取舍,并选择满足其所有设计目标的分配方法。在这篇文章中,我们将讨论一些有助于鉴定时钟树的指标,并讨论3种最常用的时钟树分布方法。转载 2024-05-09 09:30:46 · 343 阅读 · 1 评论 -
Hold Time违例,该如何解决
在Place Design之后再去看Hold Time,如果此时Hold Time的违例比较小(比如-0.05ns),还是不需要理会的,因为工具在布线时会修复Hold,但如果Slack太大了,无法修复了,就会牺牲setup来弥补hold。如果出现了hold的违例,我们首先要分析时序报告,看是不是clock的skew太大了,hold违例一般都是时钟的skew太大导致,如果skew太大,就要检查原因了,是不是时钟路径上有buffer导致的,或者是因为时钟跨SLR这种路径太长导致。转载 2024-05-15 09:08:45 · 1167 阅读 · 1 评论 -
构建自定义 AXI4-Stream FIR 滤波器
Vivado 中的block design是使用RTL IP形式的图形表示进行设计,在block design中使用 RTL 模块的方便之处在于,它将自动检测某些类型的信号,例如时钟、复位和总线接口,然后,检测这些信号进行IP间的自动化连接。最后说一下调试中的注意点,就是使用ILA查看AXI-Stream输出时候,会造成FIR的时序与采样混淆导致 FIR 不再工作,可能会查看不到任何波形,使用AXIS的专用调试IP即可,后续我们在说明这方面的知识。同时也提供了相关的驱动文件,可以在Vitis中方便调试。转载 2023-01-10 13:10:11 · 886 阅读 · 0 评论