
FPGA设计-基础篇
文章平均质量分 87
本栏主要分享一些基本的入门学习例程,分析和讲解
第二层皮-合肥
知识在于积累,分享也是总结。
优快云签约博主,曾在合肥科大讯飞、国科天迅、新华三集团就任硬件及FPGA工程师。主要分享数十年来的学习及工作经验。合作请私信
展开
-
FPGA设计-HDMI1接口设计开发
这篇设计文章为您提供了关于FPGA HDMI如何工作的完整深入的信息。这将最终涵盖FPGA板HDMI电路信息,Vivado管道设计,SDK应用程序编写,并在板上运行设计您可能熟悉HDMI的不同版本。你可能想要跟随这个参考来获得更多的信息。在几个HDMI版本中,本文将特别关注HDMI1.4标准,以便与FPGA设计接口。为此,我正在考虑一些流行的FPGA评估/开发板,例如,ZedBoard, ZC706, ZC702, VC707, KC705, AC701和SP701。原创 2024-08-11 16:17:24 · 714 阅读 · 0 评论 -
FPGA的时钟资源
7系列FPGA的时钟结构图:Clock Region:时钟区域,下图中有6个时钟区域,用不同的颜色加以区分出来Clock Backbone:从名字也能看出来,这个一个纵向贯穿整个FPGA的时钟资源,把FPGA的clock region分成了两个部分,所有的全局时钟都要从这经过。可以看到BUFG都在Clock Backbone上。Clocking Center就是Backbone中间的分割线。原创 2024-03-09 21:13:48 · 2741 阅读 · 0 评论 -
SSD的原理
SSD(Solid State Drive)是一种使用闪存存储芯片(NAND Flash)的存储设备。与传统的机械硬盘不同,SSD没有移动部件,因此具有更快的读写速度和更低的能耗。原创 2024-03-09 21:06:26 · 765 阅读 · 0 评论 -
FPGA的配置状态字寄存器Status Register
Xilinx的FPGA有多种配置接口,如SPI,BPI,SeletMAP,Serial,JTAG等;如果从时钟发送者的角度分,还可以分为主动Master(即由FPGA自己发送配置时钟信号CCLK)和被动Slave(即由外部器件提供配置所需要的时钟信号);另外还可由板上稳定晶振提供时钟信号,经由FPGA的EMCCLK接口,再从CCLK端口送出。如此多的配置形式,一旦发生配置失败怎么办?大家都知道先要查看一下板子上FPGA的DONE管脚。但绝大多数情况下,DONE管脚此时会是低电平,只能证明配置确实失败了。原创 2024-03-09 20:49:58 · 1856 阅读 · 0 评论 -
Xilinx 7系列FPGA的配置流程
这就产生问题,因为DCI匹配需要时间,我们的问题就是,过了一段时间,DCI匹配完毕了,但是CCLK却没有了,因此FPGA一直处在Start UP的前2个Phase上,不会到DONE。如果设备计算的 CRC 值与比特流中的预期CRC值不匹配,则设备将INIT_B拉低并中止配置,此时用户必须把PROG-B引脚拉低,才能进行重新配置。在准备工作完成后,FPGA开始加载配置数据。默认情况下,CRC校验包含在配置比特流中,如果禁用CRC检查,则存在加载错误配置数据帧的风险,从而导致错误的设计行为或损坏器件。原创 2024-03-09 20:46:01 · 3139 阅读 · 0 评论 -
Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置
完成FPGA初始化过程后,INIT_B被释放到高阻态,此时外部电阻器应将INIT_B拉高(将INIT_B连接到一个 的上拉电阻到VCCO_0)。当CFGBVS为GND,并且配置模式使用到BANK14/15时,VCCO_0、VCCO_14和VCCO_15必须为1.8/1.5V以避免器件损坏。当FPGA处于配置复位状态、FPGA正在初始化(清除)其配置存储器或FPGA检测到配置错误时,FPGA将该引脚驱动为低电平。原创 2024-03-08 22:08:15 · 2476 阅读 · 0 评论 -
辐射发射 电磁兼容
这篇系列文章的第 4 部分针对电源转换器(特别是工业和汽车领域使用的电源转换器)在开关时产生的辐射排放阐述了一些观点。辐射电磁干扰 (EMI) 是一种在特定环境中动态出现的问题,与电源转换器内部的寄生效应、电路布局和元器件排布及其在运行时所处的整体系统相关。因此,从设计工程师的角度出发,辐射 EMI 的问题通常更具挑战性,复杂度更高,在系统主板使用多个 DC/DC 功率级时尤为如此。了解辐射 EMI 的基本机制以及测量要求、频率范围和相应限制条件至关重要。原创 2024-03-07 19:46:47 · 680 阅读 · 0 评论 -
Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位
比如,一个Xilinx FPGA中可能含有多个DLL/DCM/PLL时钟处理模块,每个模块又可以产生多个时钟信号,在各个模块内部进行时钟信号的同步是可行的,然而想让所有时钟信号同步是完全不可行的——从DCM的分布上就可以看出来:中间相隔的长距离布线对高频时钟信号的延时显著增大,进行同步自然无法做到。在这些情况下,复位信号的变化与FGPA芯片内部信号相比起来是及其缓慢的,例如,复位按钮产生的复位信号的周期至少是在毫秒级别的,而我们FPGA内部信号往往是纳米或者微秒级别的。图4给出了一个流水线复位的情况。原创 2024-03-07 19:37:22 · 2978 阅读 · 0 评论 -
FIFO漫谈
其实FIFO理解起来很简单,就像一个水池,如果写通道打开了,就代表我们在加水,如果读通道打开了就代表我们在放水,假如不间断的加水和放水,如果加水速度比放水速度快,那FIFO 就会有满的时候,如果满了还继续加水就会溢出overflow 如果放水速度比加水速度快 ,那么 FIFO就会有空的时候。在芯片中,FIFO是一种数据缓冲区,能够按照先后顺序存储和输出数据,保证了数据的顺序性。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。原创 2024-03-05 19:52:00 · 678 阅读 · 0 评论 -
AMBA总线(一)APB总线入门
但由于APB总线自发布至今已经过去了20多年了,因此以现在的眼光看,该总线没有什么高级一说,其连接的外设也往往是低速且低功率的外设,如I2C、UART、SPI等,除了连接低速外设之外,APB总线还广泛用于配置各种IP的寄存器(这些IP预留用户控制信号,由软件进行配置,这个时候就可以选择使用APB总线来配置这些寄存器)。以APB4的slave和APB3的master为例,这个时候应该把PSTRB信号固定为全1,PPROT信号则取决于Slave是如何使用该信号的,根据不同的场景固定为不同的值。原创 2024-03-05 19:40:13 · 587 阅读 · 0 评论 -
can总线
与数据帧相比,远程帧的RTR位为隐性,没有数据域,数据长度编码域可以是0~8个字节的任何值,这个值是远程帧请求发送的数据帧的数据域长度。6)应答域:应答域由发送方发出的两个(应答间隙及应答界定)隐性位组成,所有接收到正确的CRC序列的节点将在发送节点的应答间隙上将发送的这一隐性位改写为显性位。在报文传输时,不同的帧具有不同的传输结构,下面将分别介绍四种传输帧的结构,只有严格按照该结构进行帧的传输,才能被节点正确接收和发送。域的长度不同,含有11位标识符的帧称之为标准帧,而含有29位标识符的帧称为扩展帧。原创 2023-09-14 22:27:36 · 212 阅读 · 0 评论 -
Verilog语法之条件编译`ifdef, `ifndef,`else, `elsif, `endif
但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是。到FPGA的开发,其条件编译可以通俗的理解为,根据条件选择性地将指定部分综合为电路,而未被指定部分则不综合成电路,这可以有效地减少电路面积和提高代码的复用性和灵活性。这可以通过条件编译来解决,在条件编译中,设计器可以将代码包装在编译器指令中,编译器指令告诉编译器在设置给定的命名标志时包含或排除要编译的代码。...程序段1......程序段2...原创 2023-09-14 22:21:15 · 1770 阅读 · 0 评论 -
FPGA学习-基本流程
每个bram大小为36kb,由两个独立的18k bram构成,由于两个18K的bram无法共享其中的fifo logic,所以无法将一个bram当成两个18k的fifo来用,可编程逻辑单元又称CLB,(基于7系列介绍),由两个slice构成,由于slice有slicel和slicem之分,所以又称CLBLL和CLBLM。3.一个x输入的布尔表达式和一个Y输入的布尔表达式,只要满足X+Y≤5,A6=1.此时结果由O6和O5输出。设计输入支持HDL代码,也支持IP,同时也相应提供约束文件,时许约束;原创 2023-04-06 14:02:28 · 739 阅读 · 0 评论 -
FPGA基础知识-编程语言接口
解释在Verilog仿真中如何使用PLI子程序。描述PLI的用途。定义用户自定义系统任务和函数以及用户自定义C子程序。理解用户自定义系统任务的连接和调用。从概念上解释在 Verilog 仿真器内部如何表示PLI区别并描述怎样使用两类PLI库子程序:access子程序和 utility子程序。学习如何创建用户自定义系统任务和函数,并学习如何在仿真中使用它们。原创 2023-06-20 19:56:35 · 1347 阅读 · 1 评论 -
FPGA基础知识-用户自定义原语
1. UDP只能采用标量(即1位)输入端口,允许有多个输入端口。2. UDP只能允许一个标量(即1位)输出端口。输出端口必须出现在端口列表的第一个位置,绝对不允许有多个输出端口。3.在声明部分,输出端口以关键字output声明。因为表示时序逻辑的 UDP需要保存状态,所以其输出端口必须声明为reg类型。4.输入端口以关键字input声明。5.表示时序逻辑的UDP中的状态可以用initial语句初始化。该语句是可选的,它将一个1位的值赋给reg类型的输出。原创 2023-06-19 20:49:30 · 1159 阅读 · 2 评论 -
FPGA基础知识-开关级建模
提示:这里统计学习计划的总量1.开关级建模处于很低的设计抽象层次。只在很少的情况下,比如在设计者需要定制自己的叶级元件(即最基本的元件)时,才使用开关级建模。随着电路复杂度的增加,这个级别的Verilog 设计越来越少见;2.MOS,CMOS,双向1.关和supply1,supplyO源可用于设计任意的开关级电路。CMOS开关是MOS开关的一种组合;3.延迟对开关元件来说是可选的。对于不同的双向器件,有不同的延迟解释。原创 2023-06-18 14:56:52 · 2106 阅读 · 3 评论 -
FPGA基础知识-时序和延迟
提示:这里统计学习计划的总量有三种类型的延迟模型;集总延迟、分布延迟和路径延迟.分布延迟比集总延迟更精确,但是对大规模设计而言难以建模。集总延迟相对而言易于建模。路径延迟又称引脚到引脚的延迟,定义输人端(或输入输出端)到输出端(或输入输出端)的延迟,路径延迟提供了最精确的模块延迟建模方式。specity块是表示路径延迟信息的基本块。在模块中,specify块独立于initial或者always块,它是单独出现的。并行连接和全连接是描述路径延迟的两种方法。原创 2023-06-17 15:50:35 · 2732 阅读 · 0 评论 -
FPGA基础知识-实用建模技术
这里统计学习计划的总量1.过程连续赋值语句可用于改写(覆盖)寄存器和线网上的赋值。assign和 deassign可以改写(覆盖)寄存器上的赋值。force和release可以改写(覆盖)寄存器和线网上的赋值。assign和 deassign可以用在实际的设计中。force 和 release可以用于调试。2.可以用defparam语句或者在模块调用中传递新值来改写(覆盖)已在模块中定义的参数,在模块调用中,可以按参数列表的参数顺序或者名字关联的方式给参数赋值。推荐使用名字关联的方式给参数赋值。原创 2023-06-16 23:19:55 · 1007 阅读 · 0 评论 -
FPGA基础知识-任务和函数
使用任务和函数可以将模块分割成许多个可独立管理的子单元,增强了模块的可读性和可维护性。它们和C语言中的子程序起着相同的作用任务可以具有任意多个输人、输人/输出( inout)和输出变量。在任务中可以使用延迟、事件和时序控制结构,在任务中可以调用其他的任务和函数;可重入任务使用关键字automatic进行定义,它的每--次调用都对不同的地址空间进行操作。因此,在被多次并发调用时仍然可以获得正确的结果;原创 2023-06-16 21:32:55 · 1618 阅读 · 3 评论 -
FPGA基础知识-行为级建模
解释结构化过程always和initial在行为级建模中的重要性,定义阻塞( blocking〉和非阻塞( non-blocking )过程性赋值语句.理解行为级建模中基于延迟的时序控制机制。学习使用一-般延迟、内嵌愆值延迟和零延迟:理解行为级建模中基于事件的时序控制机制。学习使用一般事件控制、命名事件控制和事件OR(或)控制。在行为级建模中使用电平敏感的时序控制机制。使用if 和 else解释条件语句。使用case,casex和casez语句讲解多路分乏。原创 2023-06-15 21:35:40 · 1270 阅读 · 1 评论 -
FPGA基础知识-数据流建模
1.连续赋值是数据流建模的主要语法结构。连续赋值总是处于有效( active )状态,即任一操作数的变化都会立即导致对表达式的重新计算。连续赋值语句的左侧值(赋值目标)必须是线网类型的变量或其连接。任何逻辑功能都能够使用连续赋值语句来完成。2.延迟值用于控制右侧变量的改变和语句左侧被赋予新值之间的时间间隔。线网的(赋值)延迟可以通过assign语句、隐式连续赋值和线网声明三种方法来实现。原创 2023-06-14 20:06:13 · 987 阅读 · 2 评论 -
FPGA基础知识-门级建模
在Verilog中,用户除可以指定上面所述的三种类型的延迟以外,对每种类型的延迟还可以指定其最小值、最大值和典型值。用户可以在仿真-开始时就决定具体选择使用哪一种延迟值(最小值/最大值/典型值)在建立器件行为模型时要用到延迟的最小值/最大值/典型值,这是因为受到集成电路制造工艺过程的影响,真实的器件延迟总是在最大值和最小值之间的范围内变化。另外,如果值变化到不确定值x,则所需的时间可以看成是以上三种延迟值中最小的那个:在Verilog 中,用户可以使用三种不同的方法来说明门的延迟。原创 2023-06-13 20:43:27 · 1435 阅读 · 3 评论 -
FPGA基础知识-模块和端口
提示:这里统计学习计划的总量模块定义包括多个组成部分。关键字module 和endmodule是必须使用的。其他各个部分,诸如端口列表、端口声明、变量和信号声明、数据流语句、行为语句块.低层模块实例以及任务和函数都是可选的,由用户根据需要进行添加。模块定义包括多个组成部分.关键字模块和终端模块是必须使用的。其他各个部分,诸如端口列表、端口声明、变量和信号声明、数据流语句、行为语句块.低层模块实例以及任务和函数都是可选的,由用户根据需要进行添加.端口是模块与其他模块或外部环境通信的渠道。原创 2023-06-12 22:44:12 · 1659 阅读 · 2 评论 -
FPGA基础知识-层次建模的概念
在本章中,我们讨论了下面的概念:用于数字电路设计的两种方法:自顶向下方法和自底向上方法,在当今的数字电路设计中,这两种方法经常组合使用。随着设计复杂性的增加,使用这些结构化的方法来进行设计管理变得越来越重要。模块是 Verilog 中的基本功能单元。模块通过调用(实例引用)来使用,模块的每个实例都被惟一标识,以区别于同-模块的其他实例。每个实例都拥有其模板模块的不同副本。读者需要将模块和模块实例区别开来。仿真有两个不同的组成部分:设计块和激励块,激励块用于测试设计块。激励块通常是顶层模块。原创 2023-06-12 13:34:03 · 1556 阅读 · 1 评论 -
FPGA实战开发-基于DDR的图像缓存(下)
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。同理对于图像的输出部分采用HDMI输出,用Vga_lcd_driver产生输出的时序。//--------一帧图像写入DDR------------//--------一帧图像读出DDR------------原创 2023-06-08 14:16:38 · 2484 阅读 · 0 评论 -
FPGA开发-ddr测试
reg [23:0]count 128M*2*16/256(为什么除以256,我也没明白,我猜想式32*16)其实式一个bank的地址范围。聚合外部所有地址字段,并向您显示一个平面地址空间,每个地址待变4BYTES。根据原理图及相关要求,配置好FPGA的MIG核,可以点击官方的案例, open IP example design。这里的地址时行列地址,还有bank地址一起,通常我们说的地址是行列,所以是24位,整体式27位。本文以FPGA核心板为例子,结合官方的案例,修改,进行了ddr测试。原创 2023-06-07 11:29:48 · 1660 阅读 · 0 评论 -
FPGA基础-阻塞赋值和非阻塞赋值
在这段程序中,A和B是同时被赋值的,具体来说就是在上升沿来的时刻,A和B同时被置1,即使调换AB的顺序;学习FPGA,必须时刻有时钟的概念,而单片机时钟相关性就比较差,FPGA必须把握每一个时钟。这是阻塞赋值,A比B提前零点几纳秒,不过整体来说,还是在一个时钟周期内完成的。即使在两个always语句中,AB也是被同时赋值的,这就叫做非阻塞赋值。3.仿真时,找问题,可以把wire,reg信号都拉出来,进行观察。在针对AB求和再除以2,非阻塞两个时钟,阻塞一个时钟周期内完成。#2,代表延迟两个时钟单位;原创 2023-05-17 13:42:39 · 445 阅读 · 0 评论