
FPGA硬件设计
文章平均质量分 83
wangbowj123
炼丹中。
展开
-
一文带你深入理解电路中的亚稳态现象与跨时钟域信号处理
前言亚稳态是一种现象,可以导致数字设备(包括FPGA)出现系统故障。当一个信号在不相关或异步时钟域的电路之间传输时,亚稳态现象较容易出现。本文描述了亚稳性,解释了为什么会出现这种现象,并讨论了它是如何导致设计失败的。由亚稳态引起的平均无故障时间(MTBF)的计算表明设计者是否应该减少此类失败机会的步骤。亚稳态数字设备(如FPGA)中的所有寄存器都定义了信号时序要求,允许每个寄存器在其输入端正确捕获数据并产生输出信号。为确保可靠运行,寄存器的输入必须在时钟边沿之前的最短时间(寄存器的建立时间tSUt_{原创 2021-06-26 21:19:40 · 2142 阅读 · 1 评论 -
同步FIFO和异步FIFO的实现
同步FIFO的实现首先是同步的实现,只需要一个时钟用来控制读写。同步 FIFO 实现较为直接,如下图所示,一个 FIFO 内部实现了 RAM 和一个控制读写的控制端,和普通的随机存储器不一样的是,FIFO 内部需要自动产生读写地址。控制端产生空、满信号。因此如何实现控制端去产生空满信号是主要需要考虑的地方。通常空满的判断是通过读、写地址进行的。第一种思路,利用读写地址的大小来判断空、满方法很简单,设置一个信号量 factor 来表识空满,每次读一个数据则令 factor - 1,写一个数据则令其原创 2021-06-10 17:32:55 · 1435 阅读 · 0 评论 -
使用 Verilog 实现排序
使用Verilog编写电路,实现排序操作。原创 2021-06-06 17:01:22 · 11934 阅读 · 1 评论 -
zynq sdk 开发之通过 BRAM 进行 PL 与 PS 的数据交互
如何在 zynq 中进行 PL 端与 PS 端的数据交互?在zynq的使用中,高效的进行 BRAM 与 zynq 硬核的数据交换至关重要,当我们需要进行小批量的数据交换时,可以考虑采用 BRAM 作为数据交换的媒介,在 PS 端,将数据通过 AXI 总线写入 PL端的 BRAM 里面去,并且再读出来。整体的设计图如下所示:PL 端硬件的设计在 vivado 2017.4 下,可以通过 block design 快速进行模块的添加与设计。设计出来的架构如图所示:注意事项:BRAM 使用真实双端原创 2020-10-06 15:54:19 · 6440 阅读 · 44 评论 -
FPGA 可编程性与布局布线原理探究
学习 FPGA 也有了一段时间,在不断 coding 的过程中,对综合、布局布线等操作感到一丝丝的困惑,特将一些个人感悟总结如下:为什么说 FPGA 是可编程的?以基于 SRAM 的 FPGA 举例,由于 FPGA 是极其细粒度的架构,无论是怎样的电路,综合到片上之后都将以 LUT 、触发器和 MUX 的结构组成,而一个 k 输入的 LUT 又是由 2k2^k2k 个 SRAM bit 位作为选择输出,从而一个 k 输入的查找表可以配置实现任意 k 输入1输出的组合逻辑,如下图所示。之所以说 FPGA原创 2020-10-04 22:34:18 · 7357 阅读 · 0 评论 -
verilog实现简单的三级加法流水线
pipeline流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗,进可攻退可守。今天这篇文章将小小总结一下流水线设计的一些关键点。原创 2020-07-08 20:24:02 · 8518 阅读 · 4 评论 -
基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)
菜鸟一枚,最近也学习了关于 AXI 总线的相关知识。基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写)。设计目的设计出以下一个通过 AXI 总线连接的简单片上系统。包含以下部分:PL 端逻辑PL 端实现四个模块包括:寄存器堆寄存器堆主要是对指令等控制信息进行片上存储。具体的指令将由 PS 端写入。对于寄存器堆来说,其相当于 slave,而 PS 端的 jupyter 服务器相当于 master。使用的总线是 AXI Lite 总线(棕色的大箭头)。控制端控原创 2020-05-12 21:34:23 · 4484 阅读 · 3 评论 -
如何实现一个带双边沿检测的触发器
这是一道 HDLBits 上面的题目(Probelm 97 Dual-edge triggered flip-flop)。目的是实现一个带双边沿检测的触发器。我们知道,FPGA上是没有带双边沿检测的触发器的,即不存在这样的写法:always @(posedge clk or negedge clk)哪怕写了,没有这样的资源也实现不了,无法综合。那么我们怎么通过硬件电路设计去实现下面的时序...原创 2020-04-27 22:51:11 · 3957 阅读 · 0 评论 -
hdlbits 练习汇总
最近发现一个很有意思的网站,可以在线提交 verilog 代码以完成一些任务,并且还能得到仿真结果对比。可以利用零碎时间提交一些代码,练习verilog基础知识。网址如下:https://hdlbits.01xz.net/wiki/从 basics 开始对提交的答案进行汇总。(本博客会不断更新)//03_Wire.vmodule top_module( input in, output...原创 2020-04-22 11:25:31 · 8498 阅读 · 1 评论 -
单时钟同步 FIFO 和二时钟异步 FIFO 的基本原理和实现
学习目的:1.给大家介绍FIFO的基本原理和组成。2.学习同步单时钟FIFO、二时钟异步FIFO的分析以及编写。3.以实例体验如何将实际需求分析转换成代码。FIFO(First In First Out)队列通常在数字系统中实现两个模块间数据的暂存,达到减少两模块之间的速度依赖,使得两个模块能够相互相对独立的运行。FIFO是FPGA设计的一个非常基本的单元。FIFO一般用一个双口RAM和分别指示...原创 2020-04-20 11:05:46 · 2490 阅读 · 0 评论 -
基于FPGA的卷积加速
基于FPGA的卷积并行加速其实有很多方法,例如脉动阵列、加法树等操作。本篇博客将介绍一下基于加法树的并行化设计。其实总体原理也是很简单的。如下图所示,九个叶子节点是乘法器节点,分别代表九次乘法运算(卷积核是3*3的)。在得到乘法运算结果之后,将结果传送给加法节点。为了进一步增加并行性,加法树结构采用三叉树。即,对每三个子节点进行求和。最终得到一个部分和。实现方式是写一个加法器模块,再写一个...原创 2020-04-18 23:32:46 · 5380 阅读 · 8 评论 -
I2C 总线操纵 EEPROM
现如今对 FPGA 的基础已经有了一定的了解,并且进入到了总线操纵的学习中来。近一段时间打算更几篇关于总线操作的博文,首先从简单的 I2C 接口对 EEPROM 的操作开始。何为总线?总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线...原创 2020-03-17 15:27:27 · 1514 阅读 · 0 评论