社区
单片机/工控
帖子详情
为什么在FPGA中读取FIFO时,读的第一个数据和第二个数据之间会有两个时钟周期的延迟呢?
neu_2015
2017-04-30 09:35:35
在使用Modesim仿真时,读FIFO的第一个数和第二个数据之间有2个时钟的延迟,这是什么原因造成的啊
...全文
1217
3
打赏
收藏
为什么在FPGA中读取FIFO时,读的第一个数据和第二个数据之间会有两个时钟周期的延迟呢?
在使用Modesim仿真时,读FIFO的第一个数和第二个数据之间有2个时钟的延迟,这是什么原因造成的啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ao_
2018-11-25
打赏
举报
回复
1
用的是Xilinx 的 FPGA 吧, 去看官网提供的官方 IP 用户手册 USER GUIDE 里都有写得很详细, 里面解释了为什么读出的时候要有两个时钟的延迟,和他在片子里的实现有关,牵涉到几个寄存器,需要有几个时钟的时间才能到达输出端口。
uid123
2017-04-30
打赏
举报
回复
还有另一种可能,就是在外部存储器中,文件不是以连续的形式存储在存储器中的,是不连续的,所以在每一段的结尾就会有识别字节和下一段地址的字节放入在这个段的末尾,在读到当前段的跳转时占一个时钟,在读取下一段的首地址时占一个时钟。
uid123
2017-04-30
打赏
举报
回复
没程序段不知道,但大概能估计来,可能我说的也不对。你用的这个应该是上操作系统了,最早在单片机里面有靠FOR循环走一个数值进入忙等待,比方说51控制的LED灯闪烁就可以用for循环进行延时,到了操作系统里面,这种延时被操作系统中的中断功能以wait这种方式交到其他程序种运行来实现延时等待,在接到中断后,这个过程种就有2个运算进行(刚刚好2个时钟),一个是记录当前指针的数据压入堆栈,第二个是等待程序的地址指针出到达当前指针寄存器。所以就能运行其他程序,然后等待时间过后回复之前程序运行。
基于
FPGA
的同步
fifo
设计。
FIFO
(First-In-First-Out) 是一种先进先出的
数据
缓存器,他与普通存储器的区别是没有外部
读
写地址线,这样使用起来非常简单,但缺点就是只能顺序写入
数据
,顺序的
读
出
数据
, 其
数据
地址由内部
读
写指针自动加1完成,不能像普通存储器那样可以由地址线决定
读
取
或写入某个指定的地址。在数字ASIC/SOC设计
中
常常被使用。
FIFO
通常可用于以下几种目的: - 跨
时
钟域 - 在将
数据
发送到芯片外之前将其缓冲(例如,发送到DRAM或SRAM) - 缓冲
数据
以供软件在以后查看 - 存储
数据
以备后用
FIFO
按工作
时
钟域的不同又可以分为:同步
FIFO
和异步
FIFO
。同步
FIFO
的写
时
钟和
读
时
钟为同一个
时
钟,
FIFO
内部所有逻辑都是同步逻辑,常常用于交互
数据
缓冲。异步
FIFO
的写
时
钟和
读
时
钟为异步
时
钟,
FIFO
内部的写逻辑和
读
逻辑的交互需要异步处理,异步
FIFO
常用于跨
时
钟域交互。
FPGA
例化的内部RAM
读
取
延迟
差异
之前一直将这种RAM和
FIFO
的操作等同了,其实二者的
数据
读
取
还是有区别的,
FIFO
在
读
请求有效的下一个
时
钟即有
数据
输出;而单口RAM是在地址有效的下下个
时
钟周期
才能得到
读
取
的
数据
。
异步
FIFO
在
FPGA
与DSP通信
中
的运用
利用异步
FIFO
实现
FPGA
与DSP进行
数据
通信的方案。
FPGA
在写
时
钟的控制下将
数据
写入
FIFO
,再与DSP进行握手后,DSP通过EMIFA接口将
数据
读
入。文
中
给出了异步
FIFO
的实现代码和
FPGA
与DSP的硬件连接电路。经验证,利用异步
FIFO
的方法,在
FPGA
与DSP通信
中
的应用,具有传输速度快、稳定可靠、实现方便的优点。
基于
FPGA
的
数据
采集系统(资料齐全,代码备注)
基于
FPGA
的
数据
采集系统。 主要实现功能流程为:首先通过串口向
FPGA
发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的
数据
存在ROM
中
,转换开始
时
读
取
ROM
中
数据
进行
读
取
转换。其次用按键控制adc128s052进行模数转换100次,模数转换
数据
存储到
FIFO
中
,再从
FIFO
中
读
取
数据
通过串口输出显示在pc上。 该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、DAC驱动模块、ADC驱动模块、同步
FIFO
模块、
FIFO
控制模块、串口发送模块。各个模块的作用如下: (1)串口接收模块(UART_Byte_Rx.v):完成串口
数据
接收,将串行
数据
转换成并行
数据
输出。 (2)按键消抖模块(key_filter.v):进行按键消抖,可输出一个脉冲按键按下标志和按键按下
时
间标志。 (3)按键控制模块(key_ctrl.v):当在DA一直输出模拟信号
时
,按下按键控制ADC转换100次。 (4)ROM模块(single_port_rom.v):存储DA转换的
数据
,可存放正弦波形
数据
。 (5)DAC驱动模块(dac_driver.v):数模转换驱动模块,与外部DAC芯片相连,提供DAC芯片
时
钟和
数据
信号等。 (6)ADC驱动模块(adc_driver.v):模数转换驱动模块,与外部ADC芯片相连,提供ADC芯片
时
钟和控制信号等。 (7)同步
FIFO
模块(sync_
fifo
.v):存放ADC转换后的
数据
。 (8)
FIFO
控制模块(
fifo
_ctrl.v):当
FIFO
中
有
数据
时
,将
FIFO
中
的
数据
转换成可以UART串口发送的
数据
。 (9)串口发送模块(Uart_Byte_Tx.v):经过
FIFO
控制模块转换的
数据
通过串口发送模块发送到串口,显示在pc端。 (10)DAC控制模块(dac_ctrl.v):当接收串口指定的指令
时
,开始将ROM的正弦
数据
进行DAC转换。
FPGA
从Xilinx 的7系列学起(8)
2.7
FIFO
模式在7系列
中
还包括专用逻辑,每个BlockRAM转换成专用的
FIFO
。这样的结构的最大好处在于可以不占用CLB资源,可以直接利用硅片里面专用单元,可以直接转化RAM为
FIFO
使用, 而且从性能上讲也比消耗逻辑资源的
FIFO
性能要好一点。XILINX 7系列
中
的
FIFO
是支持同步和异步
读
写操作,不需要
时
钟和
数据
之间
有一个相位的便宜。空信号,满信号,和可以编程的空满信号都可以被用作控制
FIFO
的信号,从而可以实现不同的功能。同步
FIFO
可以消除异步
FIFO
的固有的不确定性。它有一个first-word-fall-through的选项,在空模式下,它可以使
第一个
数据
能够立马从输出口可以
读
取
到。
FIFO
像BlockRAM一样可以提供各种不同的配置模式,当BlockRAM被分为
两个
18Kb的
时
候,它也可以使用BlockRAM的一部分。需要注意的是
FIFO
对应BlockRAM的端口A,写端口对应着BlockRAM的端口B。也BlockRAM一样可以级联出更大的存储空间,可以配置成64Kb
FIFO
支持使用异步
时
钟,它能够支持标准和first-word
单片机/工控
27,375
社区成员
28,769
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章