FPGA那些事
文章平均质量分 53
是这耀眼的瞬间
这个作者很懒,什么都没留下…
展开
-
一、PCI配置空间简介
一、PCI配置空间简介PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现转载 2017-06-21 20:52:30 · 452 阅读 · 0 评论 -
FPGA中亚稳态
1. 应用背景1.1 亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时转载 2017-11-20 22:00:37 · 1186 阅读 · 0 评论 -
通信里的同步与异步&Verilog里的同步与异步
同步通信原理 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。 采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程中,一个字符可以对应5~8位。当然,转载 2017-05-31 11:18:46 · 2860 阅读 · 0 评论 -
FPGA 查找表和寄存器等详解
1.FPGA-现场可编程门阵列 每一块FPGA芯片都是由有限多个带有可编程连接的预定义源组成来实现一种可重构数字电路。 图1.FPGA不同构成 FPGA芯片说明书中,包含了可编程逻辑模块的数量、固定功能逻辑模块(如乘法器)的数目及存储器资源(如嵌入式RAM)的大小。FPGA芯片中还有很多其它的部分,但是以上指标通常是为特定应用选择和比较FPGA时,最重要的参考转载 2017-11-16 21:20:43 · 27418 阅读 · 1 评论 -
FPGA设计-时序约束(上篇,理论篇)
FPGA方面的心得,将会由以下几个方面进行总结:1. FPGA时序约束以及高速ADC约束实例2. TDC进位延时链设计以及研究3. TDC的精度以及自动校正算法的实现 STA:Static Timing AnalysisSTA(Static Timing Analysis,即静态时序分析)在实际FPGA设计过程中的重要性是不言而喻的,其作转载 2017-11-24 20:27:36 · 741 阅读 · 0 评论 -
FPGA设计-时序约束(中篇-实例分析)
上一篇已经简单的介绍了时序,本文将会以一个ADC实例简单粗暴的进行分析;现有一块ADC连接到FPGA上,需要在FPGA上实现高速数据的读取,那么第一步自然就是完成可靠的硬件连线,其中需要注意的是:1. 注意信号的完整性,尽可能的避免边沿退化;这两区分两个概念: i. 高速信号,指的是信号翻转,由高电平到低电平或者反之所耗得时间非常小;可能一个1MHz的TT转载 2017-11-24 20:31:05 · 4142 阅读 · 1 评论 -
VHDL:conv_std_logic_vector的用法
std_logic_arith程序包里定义的数据转换函数:conv_std_logic_vector(A,位长)--INTEGER,SINGER,UNSIGNED转换成std_logic_vector。 由于参考书上都没有具体说明,本以为是将原来的数据类型按位矢量输出,结果按这种用法编写的滤波器在接实际信号时,却使用输出图像全部反色,经modelsim波形仿真之后,才发现滤波器结构转载 2017-12-04 19:40:03 · 30420 阅读 · 2 评论 -
一步一步开始FPGA逻辑设计 - 高速接口之PCIe
写在前面近两年来和几个单位接触下来,发现PCIe还是一个比较常用的,有些难度的案例,主要是涉及面比较广,需要了解逻辑设计、高速总线、Linux和Windows的驱动设计等相关知识。这篇文章主要针对Xilinx家V6和K7两个系列的PFGA,在Linux和Windows两种系统平台下,基于Xilinx的参考案例XAPP1052的基础上,设计实现了总线主控DMA(Bus Master转载 2017-11-28 11:10:48 · 3275 阅读 · 0 评论 -
总结verilog产生随机数的$random和seed
$random(seed)是verilog中最简单的产生随机数的系统函数。 在调用系统函数$random(seed)时,可以写成三种样式:1)$random,2)$random(),3)$random(seed)。下面分别说明:1)$random这是最简单的一种写法,略去了seed这个传入参数,$random会使用一个默认的seed(这个默认值为0?)。也正因此,每转载 2017-12-25 09:41:02 · 39275 阅读 · 2 评论 -
三段式状态机模板。
“三段式”状态机的Verilog HDL 代码模板如下://状态调转always @(posedge clk) beginif (!rst_n) state else state end//下一状态的计算always @(*) begin ///原本的always @(state) begin,发现老是调不通,状态不跳转,把state改成*后 就原创 2018-01-23 16:00:00 · 1303 阅读 · 0 评论 -
vivado 通过ila核 debug
https://wenku.baidu.com/view/e8de038eaef8941ea66e054a.htmlila 用于高速速率数据抓取,速率低了并不能抓取到数据原创 2018-01-12 11:08:39 · 1707 阅读 · 0 评论 -
vhdl中变量(variable)和信号(signal)的区别
信号(signal) 变量(variable)赋值: <= : =定义: 在结构体中 在进程中适用范围: 全局 ...转载 2018-03-06 20:32:43 · 8693 阅读 · 0 评论 -
VHDL并行语句于顺序语句的理解
VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。进程语句begin进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述语句。进行语句结构内部所有语句都是顺序执行的进程语句的启动是由process后敏感信号表中所标明的敏感信号触发来的。各进程间的通信是由信号来传递的语法如下:标记:pro...翻译 2018-03-08 10:08:49 · 16182 阅读 · 1 评论 -
VHDL verilog 互相调用的例子
VHDL调用verilog: module sync_block #( parameter INITIALISE = 2'b00 ) ( input clk, // clock to be sync'ed to input data_in, // Data to be 'synced' output ...转载 2018-03-12 10:51:10 · 4155 阅读 · 0 评论 -
综合时:ambiguous clock in event control
原来是 紫色箭头处,没用else语句。导致了可能出现不确定输出的情况原创 2018-03-12 11:14:20 · 17024 阅读 · 6 评论 -
单口RAM、双口RAM、FIFO
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线,读写可同时进行。FIFO读写可同时进行,可以看作是双口。 双口RAM分伪双口RAM(Xilinx称为Simple two-dual RAM)与双口RAM(Xilinx称为true two-dual RAM)。伪双口RAM,一个端口只读,另一个端口只写;而双口RAM两个端口都可以读写。 F...转载 2018-04-02 15:54:46 · 817 阅读 · 0 评论 -
AXI总线简介
转载一篇 AXI总线简介 博客,内容个人感觉很好,收获很大 原文链接 http://www.cnblogs.com/lkiller/p/4773235.html原文内容:0.绪论AXI是高级扩展接口,在AMBA3.0中提出,AMBA4.0将其修改升级为AXI4.0。AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream转载 2017-11-28 21:53:08 · 794 阅读 · 0 评论 -
vivado申请和添加官网上的IP
今天博主在练一个kc705的案例时,终于知道了怎么获取官网的IP核,以及怎么安装进去vivado里,虽然官网上有相关教程,但是全是英文的,看起来费时费力。这个联系项目需要这三个license,否则在生成bitstream时报错: "vivado warning :IP license key 'tri_mode_eth_mac@2014.10' is enabled with a Desig原创 2017-11-14 11:05:23 · 8539 阅读 · 2 评论 -
时序收敛相关知识和概念
1. FPGA时序的基本概念 FPGA器件的需求取决于系统和上下游(upstream and downstrem)设备。我们的设计需要和其他的devices进行数据的交互,其他的devices可能是FPGA外部的芯片,可能是FPGA内部的硬核。 对于FPGA design来说,必须要关注在指定要求下,它能否正常工作。这个正常工作包括同步时序电转载 2017-07-03 09:41:34 · 1506 阅读 · 0 评论 -
'compile' step failed with error(s) while executing 初学者的问题
module test_bidata;reg clk;reg z;reg[15:0]din;wire[15:0]dout;wire[15:0]dinout;integer i;bidirec_data uut( .din(din), .z(z), .clk(clk), .dout(dout), .原创 2017-07-04 10:39:13 · 3783 阅读 · 0 评论 -
关于verilog分频程序
众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频转载 2017-07-25 10:25:28 · 1371 阅读 · 0 评论 -
FPGA开发流程:详述每一环节的物理含义和实现目标
要知道,要把一件事情做好,不管是做哪们技术还是办什么手续,明白这个事情的流程非常关键,它决定了这件事情的顺利进行与否。同样,我们学习FPGA开发数字系统这个技术,先撇开使用这个技术的基础编程语言的具体语法、使用工具和使用技巧不谈,咱先来弄清楚FPGA的开发流程是什么。 FPGA的开发流程是遵循着ASIC的开发流程发展的,发展到目前为止,FPGA的开发流程总体按照图1进行,有些步骤可能由于转载 2017-08-28 10:17:59 · 606 阅读 · 0 评论 -
VHDL:信号、端口以及和Verilog的区别
VHDL:信号、端口以及和Verilog的区别1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。 信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的表达方式)。这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向。信号定义的语句格式与转载 2017-09-15 16:42:08 · 3970 阅读 · 0 评论 -
verilog实现奇数倍分频
verilog实现奇数倍分频在学习FPGA的过程中,最简单最基本的实验应该就是分频器了,同时分频器也是FPGA设计中使用频率非常高的基本设计之一,尽管在芯片厂家提供的IDE中集成了锁相环IP,如altera 的PLL,Xilinx ISE的DLL或者vivado中的clock来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的逻辑,通过语言进行时钟的分频相移显得十分方转载 2017-10-27 17:32:18 · 2319 阅读 · 2 评论 -
门控时钟、使能时钟的实现
在编写FPGA的时候我们常常会遇到这样的问题:全局时钟的频率太高了,某些模块需要频率更低的时钟来驱动,总是调用pll太浪费资源了。现在说说这种时候该怎么办1. 门控时钟分频门控时钟就是通过计数的方式来实现对全局时钟的分频,满足你对低频时钟的需求。基于计数器的分频器不说了太基础了,现在说说非整数分频怎么实现。非整数分频有两种方法,分别为交错法和累加法。a. 交错法转载 2017-10-27 20:19:37 · 4160 阅读 · 0 评论 -
Verilog实现同步整形电路的原理及代码解析
问题来源:写RS-232串口的时候,涉及到按键处理逻辑模块,需要将“”在板子上按键”这一动作转化为一个脉冲信号。这一过程是通过同步整形电路实现的,精确表述如下:将外部输入的异步信号进行同步处理(与系统时钟同步)和整形(将输入信号由不规则波形提取为具备一个或多个时钟周期长得脉冲信号)。源代码有关片段如下:[cpp] view plain copy原创 2017-11-06 21:09:28 · 1916 阅读 · 0 评论 -
Verilog同步整形电路
CPLD/FPGA同步电路具备最稳定的工作状态和工作性能,因此经常需要将外部输入的异步信号进行同步处理(与系统时钟同步)和整形(将输入信号由不规则波形提取为具备一个时钟周期长的脉冲信号) 同步整形的基本方法就是通过时钟对异步信号连续采样得到同步信号,然后由前后两次的同步采样进行逻辑组合得到整形输出。 以下是一个利用上升沿完成信号同步整形的设计:module syn_pose转载 2017-11-06 21:16:28 · 1836 阅读 · 0 评论 -
波特率编程
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示[1] 。波特率发生器不是产生波特率时钟的,波特率时钟频率/波特率因子=波特率。波特率发生器的作用是从输入时钟转换出需要的波特率clk一个完整的由verilog实现的波特率发生器:module baud_gen(clk_50MHz, rst_p, bclk);input clk_50MHz; /转载 2017-11-07 09:40:08 · 1205 阅读 · 0 评论 -
异步FIFO设计
需求说明:Verilog设计内容 :异步FIFO设计来自 :时间的诗原文:http://www.cnblogs.com/BitArt/archive/2013/04/10/3010073.html本文大部分内容来自Clifford E. Cummings的《Simulation and Synthesis Techniques f转载 2017-10-23 20:03:04 · 751 阅读 · 0 评论 -
PCIE_DMA实例三:Xilinx 7系列(KC705/VC709)FPGA的EDK仿真
一:前言好久没写博客了,前段时间有个朋友加微信请教关于PCIe的一些学习方法。本人也不是专家,只是略知一些皮毛。对于大家反馈的问题未必能一一解答,但一定知无不言。以后我会常来博客园看看,大家可以把问题直接在评论区提出来。这篇博客是应部分网友的要求写的,Xilinx升级到7系列后,原来的pcie ip核trn接口统统转换成了axis接口,这可愁坏了之前用xapp1052的朋友,一下子不好用了转载 2017-11-09 17:30:39 · 5590 阅读 · 2 评论 -
移位寄存器设置移位长度
设地址一共有32位if(addra1 addra2 //延迟16个单位elseaddra2 if(addrb1 addrb2 // 延迟8个单位else addrb2 利用rom来进行延迟操作或者移位操作的时候,通过设置延迟放入的地址,移位寄存器来设置延迟的时长。原创 2017-11-03 19:58:45 · 2350 阅读 · 0 评论 -
FPGA中的除法运算及初识AXI总线
PGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会。若其中一个操作数为常数,可通过简单的移位与求和操作代替,但用硬件逻辑完成两变量间除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成。因此FPGA实现除法运算并不是一个“/”号可以解决的。 好在此类基本运算均有免费的IP核使用,本人使用的VIVADO 2016.4开发环境提供的divider gen IP...转载 2018-05-10 16:36:53 · 3560 阅读 · 0 评论