草庐IT

FPGA_学习_15_IP核_VIO

前一篇博客我们提到在线调试的时候,可执行文件只要烧进板子,程序它就会自己跑起来,不会等你点这个按钮,它才开始跑。我们测试的模块中,里面可能有几个我们关心的信号,它会在程序刚运行很短的时间内发生状态跳变。当我们打算去捕获它的状态变化的时候,这个时候程序已经跑过了,这导致我们无法抓取到。那这个时候我们应该怎么办呢?引入VIO这个工具,用VIO的输出信号作为我们测试模块的使能信号,这样我们就能控制待测试的模块什么时候运行。 VIO是个特别简单的IP核,丝毫不用有畏难情绪。1VIO是什么VIO是虚拟输入/输出(VirtualInput/Output),可以实时监测和驱动FPGA内部信号。在线调试的时候

FPGA电平标准的介绍

    对FPGA的管脚进行约束的时候,常常看到这样的电平标准,例如LVCOM18,LVCOS25,LVDS,LVDS25等等,其实这些都是一系列的电平标准。    针对数字电路而言,数字电路表示电平的只有1和0两个状态,在实际的电路中,需要约定什么样的电压为1,什么样的电压为0。    数字电路中的双阈值是这样定义的,例如TTL接口电平标准:对于输出端,状态1的电压要求为大于等于2.4V,状态0的电压要求为小于等于0.5V;对于输入端,状态1的判定要求为大于等于2.0V,状态0的判定要求为小于等于0.8V;也就是需要大于某一个阈值表示电平1,小于某一个阈值表示电平0. 电平标准的分类    

FPGA控制TDC-GPX2时间间隔测量(二)

续接上文,介绍完TDC-GPX2的芯片详情之后,本文介绍一下如何使用FPGA控制TDC-GPX2进行时间间隔测量。硬件条件本设计采用赛灵思的XC7A35T作为主控FPGA,校标方面,由于身边暂时拿不到专业的时间测量仪器,所以就采用FPGA内部自己产生STOP脉冲,脉冲数量可控,且时间间隔准确。下图为硬件连接图:FPGA输出CLK、STOP1(连续产生两个脉冲)、STOP2(实际上没用到)给TDC-GPX2进行时间间隔测量。软件介绍首先放上本设计的schematic如下所示:图片可能比较模糊,主要分为:按键输入消抖、STOP脉冲生成、TDC控制、DCM时钟管理单元以及ILA逻辑分析仪。案件主要是

基于FPGA的电子时钟设计与实现 (在EDA开发板上实现电子时钟功能)

开发板:此款开发板使用的是ALTERA公司的CycloneIV系列FPGA,型号为EP4CE6F17C8,256个引脚的FBGA封装。 题目:在EDA开发板上实现电子时钟功能要求:实现电子时钟程序编写,实现在7段数码管显示时、分、秒,使用4x4矩阵按键模拟调节时钟指令输入按键,并实现整点报时功能。按键功能包括但不限以下功能:选择(时分秒选择按键、可以一一对应,也可以只用1个按键)、复位、+(时分秒加)、-(时分秒减)。程序设计步骤:1、七段数码管显示12.46.57图1 开机显示画面,其中.为时分秒的间隔2、数据输入:在图1所示的状态下,用4x4矩阵按键来进行时分秒的调节。3、整点报时:到整点

基4FFT 1024 fpga(verilog)实现

文章目录概要整体结果模块设计细节实现小结概要对于基4fft算法,计算原理无需多说,可以看看知网论文,或者数字信号处理的书籍,本次基4fft按照AXI4-stream总线协议方式,当握手时开始产生传送数据流整体结构本次采用的方法是使用状态机实现:(1)S0状态:初始状态.(2)S1状态:开始传送数据,(S2):开始将RAM1的数据读出,进行蝶形运算到RAM2中.(S3)将RAM2数据读出进行蝶形运算到RAM2中.(S4):等待握手从RAM2读出结果,此时RAM1可以接受新的数据,当读完并且存完时,进入状态S2,开始新一轮计算。(当开始接受数据到开始接受下一组数据的间隔大约为3600左右时钟)模块

【FPGA】zynq 单端口RAM 双端口RAM 读写冲突 写写冲突

RAMRAM读写分类RAM原理及实现RAM三种读写模式不变模式写优先读优先单端口RAM伪双端口RAM真双端口RAM读写冲突和写写冲突读写冲突写写冲突总结:RAMRAM的英文全称是RandomAccessMemory,即随机存取存储器,简称随机存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址的存储单元中读出数据,其读写速度是由时钟频率决定的。具体的分类讲解可以看SDRAM、DRAM及DDRFLASHROM概念详解这篇文章我们使用的RAM是静态RAMRAM读写分类在RAM中,单端口RAM(Single-portRAM)和双端口RAM(Dual-portRAM)是两种常见

FPGA模块——SPI协议(读写FLASH)

FPGA模块——SPI协议(读写FLASH)(1)FLASH芯片W25Q16BV(2)SPI协议(3)芯片部分命令1.WriteEnable(06h)2.ChipErase(C7h/60h)3.写指令(02h)4.读指令(03h)(4)代码1.FPGA做主机的SPI协议2.SPI协议的使用(1)FLASH芯片W25Q16BV芯片引脚图:内部结构图:存储区域总共分成了32块,每块64KB。每块又分成了16个部分,每个部分4KB。方便进行读取和局部操作。电路设计(2)SPI协议SPI的四种模式这里使用这个模式:主机和从机在时钟上升沿放入要输出的数据,在时钟下降沿读取要输入的数据。8个时钟后交换一个

FPGA IP核配置FIFO中遇到数据不匹配以及输出数据缺失问题的解决与思考

本人配置了一个16bit数据转8bit数据的FIFO,因为不涉及异步时钟,所以使用的是单时钟。一、初级问题:empty信号一直为高,嗯~让我难以下手,毕竟这个问题过于简单化了,这是复位的问题,我的是低电平复位,前期为了方便,我便把复位信号拉低了,然后它一直处于复位状态。我把复位信号直接拉高(让复位信号为1),这个问题不再出现。仿真时出现了一种很奇怪的问题,当给FIFO写入数据时,FIFO中的数据不能准确的读出来,或者说是这种数据是错位的,怎样的错位呢,如下所示写入数据:0x0102    0x0304    0x0506    0x0708    0x090A    0x0B0C    0x0

K7系列FPGA进行FLASH读写1——CCLK控制(STARTUPE2原语)

  最近的工作涉及对FPGA进行远程更新,也就是通过远程通信接口将.bin文件送到FPGA,然后写入FLASH,这样当FPGA重新上电后就可以执行更新后的程序了。因此第一步工作就是进行FLASH的读写控制。  然而如果尝试配置FLASH管脚时,会发现CCLK管脚是不可配置的,这实际上是因为CCLK_0管脚在内部已经被占用,我们必须通过其他方式获取/设置它。笔者所用芯片为K7系列,根据ug470数据手册,我们可以使用STARTUPE2原语获取、设置该时钟,官方手册的介绍如下原语调用格式如下STARTUPE2#( .PROG_USR ("FALSE"), .SIM_CCLK_FREQ (0.0)

什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

前言在FPGA设计中,几乎没人会主动使用锁存器Latch,但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch,而这些Latch可能会给你带来巨大的麻烦。什么是锁存器Latch?Latch,锁存器,一种可以存储电路状态信息的组合逻辑元件,和同样可以保存电路状态的时序逻辑元件–触发器(Flip-Flop,FF)不同,锁存器只在其使能端口有效时,将输入传递给输出;而在其使能端口无效时,输出则保持不变,就像被“锁住储存”起来了一样。下图是一个典型的Latch的门电路结构。当使能信号E无效时,两个与门的输出均为0,对后面的SR锁存器即或非门无影响,所以无论输入D的值为1或0,输出Q的值都不会改变