FPGA—Verilog与Hls学习与实践
文章平均质量分 80
如果您是对FPGA开发感兴趣的初学者或已有一定经验的工程师,那么本专栏“FPGA—Verilog与Hls学习与实践”将会是非常有价值的学习资料。本专栏将涵盖FPGA开发中常用的硬件描述语言Verilog以及高层次综合技术HLS,并将结合实例来讲解FPGA设计的基本思路、流程和应用,您将能够全面了解。
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
CV视界
专注于深度学习、计算机视觉和自然语言处理等多个方向技术分享。
展开
-
verilog牛客网刷题代码汇总
VL2 异步复位的串联T触发器VL2 异步复位的串联T触发器LV3 奇偶校验LV3 奇偶校验VL4 移位运算与乘法VL4 移位运算与乘法LV5 位拆分与运算LV5 位拆分与运算VL6 多功能数据处理器VL6 多功能数据处理器VL7 求两个数的差值VL7 求两个数的差值VL8 使用generate…for语句简化代码VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL9 使用子模块实现三输入数的大小比较VL10 使用函数实现数据大小端转原创 2022-08-10 18:25:28 · 3931 阅读 · 6 评论 -
对卷积的定点化运算理解与HLS的实现
定点化的含义首先我们需要对训练好的数据进行分析,得出小数点的位置。将feature map做定点化,我们可以通过查看10000张图片做推测后的最大值和最小值,然后确定其定点精确度(小数点的位置)。将权重weight做定点化,因为权重都是已知,通道训练得到的权值数据很容易确定小数点的位置做定点化。打个比方说weight的范围为[-8,7],此时只需要4bit就可以表示整数部分,所以小数部分占比为12 bit。总结:找出每一个节点取值范围和小数点的位置,这个过程我们称之为定点化或者训练结束后的量化。原创 2020-10-31 19:44:07 · 292 阅读 · 0 评论 -
基于HLS的FPGA加速器设计——双缓冲的程序分析
这个程序的原理是从后者推理前者,主要的代码构成包括下列几部分load_bias用于加载偏执项load_input用于输入提特征图load_weight用于加载权重compute用于一个块的卷积计算,如图1所示,其目的就是计算上述标定的【Tn,Tr+k-1,Tc+k-1】与【Tm,Tn,k,k】的卷积输出【tm,tr,tc】(此时输出特征图通道维度的计算不完整)但是此时一个输入特征图由于通道的维度较深,所以仍然是没有计算完整的,因此这里的compute_output函数用于保证输入特征图的通道维..原创 2022-04-07 15:18:41 · 348 阅读 · 0 评论 -
基于Verilog搭建一个卷积运算单元的简单实现
基于Verilog实现卷积神的运算需要,有3个要素,图片信息、滤波器权值信息和大量的乘加运算,一个基本的卷积运算过程如图1所示,本博客是在前文(1. Vivado简单双端口RAM 使用,问题探析和基于verilog的CNN搭建缓存图片数据浅析)分析的基础上,系统的说明具体的实现过程,主要包括代码分析和仿真实现,旨在自我学习记录。为了加深理解,且便于仿真,本实验模拟了一个大小为5×5大小的图片结和2×2的滤波器,注意:本实验没有考虑偏置项。图1 卷积的实现过程图2 图片(左)和滤波器(右)原创 2022-09-29 20:39:55 · 4291 阅读 · 0 评论 -
基于verilog的CNN搭建缓存图片数据浅析
我们采用FPGA的RAM的进行图片(假设图片为5×5,滤波器的大小为3×3)数据缓存,由于图像的数据是按行展开串行送入,但是在进行卷积计算时,我们至少需要同时有3行的数据参与运算,所以需要定义数组为3的window_in和window_out用于RAM中图片缓存的输入与输出。在编写基于verilog的的卷积神经网络实现时,需要定义一个滑窗,并与对应位置的图像像素值相乘再相加,实现单点的卷积运算,具体的操作如图1所示。这时的仿真结果如图3所示,此时,例化的3个RAM的IP时完全相同的。图1 卷积的实现过程。原创 2022-09-27 21:04:17 · 1932 阅读 · 3 评论 -
Vivado简单双端口RAM 使用,问题探析
在采用vivado的ram的进行图片数据的存取过程中,关于读写的时钟周期不太理解,因此撰写此博客用于记录。代码的实现的功能是将5×5的图片数据存入文件中,然后我们按行依次读取送入data_in中,然后再设定一个深度为5的ram用于缓存数据,通过写地址的方式将数据存入指定位置,之后再通过读地址的方式将数据从ram中读出。原创 2022-09-27 14:25:14 · 4060 阅读 · 0 评论 -
半加器,全加器,串行加法和超前加法器
逻辑电路简单,容易理解,缺点是位数较多时,计算较慢?所以如何提高计算速度?原创 2022-08-09 22:20:15 · 525 阅读 · 0 评论 -
FPGA-HDMI-静态图片(灰度化)显示实验(ZYBO Z7)
本文章是在FPGA-HDMI-彩条显示实验(ZYBO Z7)的基础上,设计的静态图片显示实验,所用的板子仍然为ZYBO Z7,其目的为后期的图像处理实现奠定基础。主要包括图片准备、coe文件转化、verilog代码编写和下载验证等几个步骤。原创 2022-10-02 12:21:55 · 2311 阅读 · 0 评论 -
FPGA-HDMI-彩条显示实验(ZYBO Z7)
HDMI-彩条显示实验原创 2022-09-10 19:18:11 · 1985 阅读 · 6 评论 -
FPGA-HDMI-图片Sobel滤波显示实验(ZYBO Z7)
前文已经介绍了如何将静态图片进行二值化或者灰度化显示,本节是在此前实验的基础上,对图像进行soble滤波处理,关于数字图像的滤波算法,可参考博客MATLAB-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化。该文章主要讲述算法构建,编程实现,时序仿真和板级验证四个环节。原创 2022-10-09 15:20:54 · 1268 阅读 · 0 评论 -
AXI4总线介绍
AXI总线知识以下内容转自:https://www.cnblogs.com/lifan3a/articles/4682464.html一、AXI总线是什么?AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。AXI4:主要面向高性能地址映射通信的需求;AXI4-Lite:是一个简单地吞吐量地址映射性通信总线;AXI4-Stream:面向高速流数据传输;AXI4总线分为主、从两端原创 2020-11-01 18:21:01 · 169 阅读 · 0 评论 -
跨时钟域问题(三)异步FIFO的Verilog实现(格雷码)
异步FIFO是用来在两个异步时钟域间传输数据。图1 用异步FIFO进行数据传输System X利用xclk时钟将数据写入FIFO,并利用System X利用yclk时钟进行输出。其中fifo_full和fifo_empty分别是满标志和空标志,用于说明数据状态,当fifo_full时,不再进行数据的写入,当fifo_empty时不再进行数据的读取。.........原创 2022-08-11 23:27:08 · 4437 阅读 · 0 评论 -
【FPGA】跨时钟域问题(二)(单bit信号跨时钟域 1. 电平同步器 2. 边沿同步器 3. 脉冲检测器)
触发器的建立时间和保持时间在时钟上升沿左右定义了一个时间窗口,如果触发器数据输入端口上的数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违规。存在这个时序违规是因为违反了建立时间要求和保持时间要求,此时触发器内部的一个节点(一个内部节点或者要输出到外部节点)可能会在一个电压范围内浮动,无法稳定在逻辑0或者逻辑1状态。换句话说,如果数据在上述窗口中被采集,触发器中的晶体管不能可靠地设置为逻辑0或者逻辑1对应的电平上。...........................原创 2022-08-09 15:55:21 · 6010 阅读 · 0 评论 -
跨时钟域问题(一)(建立时间保持时间和亚稳态)
触发器的建立时间和保持时间在时钟上升沿左右定义了一个时间窗口,如果触发器数据输入端口上的数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违规。存在这个时序违规是因为违反了建立时间要求和保持时间要求,此时触发器内部的一个节点(一个内部节点或者要输出到外部节点)可能会在一个电压范围内浮动,无法稳定在逻辑0或者逻辑1状态。换句话说,如果数据在上述窗口中被采集,触发器中的晶体管不能可靠地设置为逻辑0或者逻辑1对应的电平上。...原创 2022-08-09 20:47:18 · 1214 阅读 · 0 评论 -
verilog_边学边练习(6) 相邻点累加(时序逻辑电路)
1.2 仿真结果原创 2022-06-21 18:56:17 · 2587 阅读 · 0 评论 -
verilog_边学边练习(5) 秒计数器(时序逻辑电路)
1.2 仿真实现原创 2022-06-21 13:52:14 · 506 阅读 · 0 评论 -
verilog_边学边练习(4)计数器_四级伪随机码发生器(时序逻辑电路)
1.2 仿真实现2.2 仿真实现原创 2022-06-21 10:35:07 · 569 阅读 · 0 评论 -
verilog_边学边练习(3)补码转换_七段数码管译码(组合逻辑电路)
1.2 仿真实现2.2 仿真实现原创 2022-06-20 22:48:41 · 713 阅读 · 0 评论 -
verilog_边学边练习(2)二选一_四选一(组合逻辑电路)
1.2 二选一仿真实现这样会有4种结果2.2 2位选择器仿真实现原创 2022-06-20 21:32:43 · 2410 阅读 · 0 评论 -
verilog边学边练习(1)反相器_与非门
仿真实现原创 2022-06-20 17:23:43 · 1119 阅读 · 0 评论 -
硬件描述语言Verilog学习(五)
条件运算符和拼接运算符的学习原创 2022-06-15 00:13:08 · 3652 阅读 · 0 评论 -
硬件描述语言Verilog学习(二)
assign 语句是连续赋值语句,一般是将一个变量的值不间断地赋值给另一变量,两个变量之间就类似于被导线连在了一起,习惯上当做连线用。assign 语句的基本格式是:assign 语句的功能属于组合逻辑的范畴,应用范围可以概括为一下几点:需要说明的是,多条 assign 连续赋值语句之间互相独立、并行执行。always 语句是条件循环语句,执行机制是通过对一个称为敏感变量表的事件驱动来实现的,下面会具体讲到。always 语句的基本格式是:always 是“一直、总是”的意思,@后面跟着事件。整个 al原创 2022-06-14 00:30:53 · 1577 阅读 · 0 评论 -
硬件描述语言Verilog学习(三)
算术运算符包括加法“+”、减法“-”、乘法“”、除法“/”和求余“%”,其中常用的算术运算符主要有:加法“+”,减法“-”和乘法“”。注意,常用的运算中不包括除法和求余运算符,这是由于除法和求余不是简单的门逻辑搭建起来的,其所对应的硬件电路比较大。加减是最简单的运算,而乘法可以拆解成多个加法运算,因此加减法、乘法所对应的电路都比较小。而除法就不同了,同学们可以回想一下除法的步骤,其涉及到多次乘法、移位、加减法,所以除法对应的电路是复杂的,这也同时要求设计师在进行 Verilog 设计时要慎用除法。首先学习原创 2022-06-14 16:04:35 · 688 阅读 · 0 评论 -
硬件描述语言Verilog学习(一)
主要学习综合和仿真、模块结构和信号类型Verilog 是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在 Verilog 描述出硬件功能后需要使用综合器对 Verilog 代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将 Verilog 代码转成网表的工具就是综合器。上图左上角是一段 Verilog 代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE 和 VIVADO 等 FPGA 开发工具都是综合器,原创 2022-06-12 17:17:54 · 1144 阅读 · 1 评论 -
FPGA快速入门
第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的V转载 2022-06-11 14:56:08 · 11319 阅读 · 4 评论