FPGA-基本IP核的应用-FIFO(同步)
基本概念
FIFO的英文全称为First In First Out,即先进先出。FPGA使用的FIFO一般指的是对数据的存储具有先进先出的特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互,也即所谓的跨时钟域信号传递(发送和接收不是同一个时钟)。
它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点就是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址
创建IP
先做同步时钟(单时钟FIFO)情况下
设置FIFO的位宽,即传输数据的位宽,深度为传输128字节的数据,选择单时钟FIFO
设置引脚
full为数据满时的标志信号,empty为空数据标志信号,usedw[]为剩余的可用数据量;
almost empty/almost full 将满/将空 标志信号,当剩余数据量将满/将空时,对应信号拉高;
Asynchronous clear 异步清零;
Synchronous clear同步清零;
一般使用异步清零。
选择读请求信号的类型,此处选择正常模式的FIFO,即数据在读请求发出后有效;
选择存储的数据类型,此处以自动Auto为例。
不需要用更多空间换取最大的性能,但需要电能保护。
仍然生成.v文件
再创建一个前写模式s_fifo_ah.v,存储数据256字节,选择另一种模式,在读请求之前数据有效,生成.v文件。
打开生成的inst文件
将其复制到test_ip文件里,并修改端口连接信息
测试代码
顶层test_ip.v
module test_ip (input rst_n,input clk,input [7:0] no_data ,input no_rdreq ,input no_wrreq , output [7:0] no_q , input [7:0] ah_data ,input ah_rdreq ,input ah_wrreq ,output [7:0] ah_q );wire no_empty ;wire no_full ;wire [6:0] no_usedw ;wire ah_empty ; wire ah_full ; wire [7:0] ah_usedw ; s_fifo s_fifo_inst (.aclr ( ~rst_n ),.clock ( clk ),.data ( no_data ),.rdreq ( no_rdreq ),.wrreq ( no_wrreq ),.empty ( no_empty ),.full ( no_full ),.q ( no_q ),.usedw ( no_usedw ));s_fifo_ah s_fifo_ah_inst (.aclr ( ~rst_n ),.clock ( clk ),.data ( ah_data ),.rdreq ( ah_rdreq ),.wrreq ( ah_wrreq ),.empty ( ah_empty ),.full ( ah_full ),.q ( ah_q ),.usedw ( ah_usedw ));endmodule
测试文件
`timescale 1ns/1ps
module test_tb();reg rst_n ; reg clk ; reg [7:0] no_data ; reg no_rdreq ; reg no_wrreq ;wire [7:0] no_q ;reg [7:0] ah_data ; reg ah_rdreq ; reg ah_wrreq ; wire [7:0] ah_q ; parameter CYCLE = 20;test_ip u_test_ip (.rst_n ( rst_n ),.clk ( clk ),.no_data (no_data ),.no_rdreq (no_rdreq ),.no_wrreq (no_wrreq ),.no_q (no_q ),.ah_data (ah_data ),.ah_rdreq (ah_rdreq ),.ah_wrreq (ah_wrreq ),.ah_q (ah_q ));integer i ;initial beginclk = 1'b1;rst_n = 1'b1;#(2*CYCLE);#5;rst_n = 1'b0;no_data = 0 ;//复位给定信号初值no_rdreq = 0 ;no_wrreq = 0 ;ah_data = 0 ;ah_rdreq = 0 ;ah_wrreq = 0 ;#(5*CYCLE);rst_n = 1'b1;//复位释放#(CYCLE*10);//延迟10个时钟是为了打开时钟锁得到稳定的时钟信号//写数据for(i=0;i<32;i=i+1) beginno_wrreq = 1'b1 ;no_data = i + 1 ;//data给1到64ah_wrreq = 1'b1 ;ah_data = i + 1 ;#(CYCLE) ;//保证一个时钟周期写写完一个数据
end no_wrreq = 1'b0 ;//写完数据拉低ah_wrreq = 1'b0 ;#(5*CYCLE) ;//读数据for (i=0;i<16;i=i+1) beginno_rdreq = 1'b1 ;ah_rdreq = 1'b1 ;//写数据读地址#(CYCLE*2) ;//保证一个是时钟周期读完一个数据end //这个for循环,内部三行代码,在时钟上升沿到来时且读请求拉高时读一个数据,持续两个时钟周期读2个数据,相当于执行依次循环读2个数据,for循环要经历16次,所以循环内读了32个数据no_rdreq = 1'b0 ; ah_rdreq = 1'b0 ; //读完数据拉低#(20*CYCLE) ;$stop;
endalways #(CYCLE/2) clk = ~clk ;//50M
endmodule
test.do文件(修改自己的对应文件路径)
vlib work
vmap work work#编译testbench文件
vlog test_tb.v
#编译 设计文件
vlog ../ip/s_fifo.v
vlog ../ip/s_fifo_ah.v
vlog ../rtl/test_ip.vvlog altera_mf.v#指定仿真顶层
vsim -novopt work.test_tb
#添加信号到波形窗
add wave -position insertpoint sim:/test_tb//*run -all
另外,由于正常模式和前写模式fifo生成的ip文件里没有用到eccstatus端口,需要注释掉
仿真分析
全局:
先分析正常模式下,
上图定位出可以看出,写写请求拉高时有了第一个数据,而当在下一个始终上升沿时,此时已经有了数据,空数据标志拉低(它是在数据写入的同时拉低,表明可能是组合逻辑),可用数据量为1,q端无变化。
然后观察读数据波形:
当读请求拉高时,在下一个时钟上升沿读出数据1,之前写入了32个数据,读出1个数后,剩余可用数据量为31个
到最后读完时,输出32个数据,剩余可用数据为0,与此同时空信号标志拉高,数据读完后读请求拉低。
然后分析前写模式:
对比两种模式下,正常模式是在读请求拉高后才有数据,而前写模式fifo在读请求拉高之前就已经输出了一个数据,并知道拉高之后再输出第二个数据。
FPGA-基本IP核的应用-FIFO(同步)相关推荐
- PLL锁相环原理以及Altera FPGA的IP核实现
文章目录 前言 一.PLL锁相环功能核原理 1. 锁相环功能 2. 锁相环原理[1] 二.Altera的FPGA调用IP核实现 后续补充 总结 参考文献 前言 本文主要介绍了锁相环的原理,以及适用Al ...
- FPGA开源IP核下载opencores.org
原贴 http://bbs.elecfans.com/m/jishu_384213_1_1.html [问答] opencores这个网站的使用常识 2013-9-28 22:42 关于http:// ...
- ISE中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较
ISE下的FIFO IP核有Standard FIFO和First-word-Fall-Through两种模式,相对于标准模式FWFT(First-word-Fall-Through)可以不需要读命令 ...
- FPGA的ip核之概念和分类
ip核之概念和分类 IP(Intellectual Property)内核模块是一种预先设计好的甚至已经过验证的具有某种确定功能的集成电路.器件或部件.它有几种不同形式.IP内核模块有行为(behav ...
- vivado中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较
1.Standard FIFO与First-word-Fall-Through(简称FWFT) 在vivado中例化fifo的IP核的时候,在native ports部分有两种模式可以选择,如下图所示 ...
- Quartus联合modelsim的ip核仿真——以FIFO为例——(报错问题解决)
tips:本文章不涉及fifo的ip核参数含义讲解,只是通一通开发流程,总结一下哪里容易报错,新手向,旨在能够正确出波形,别卡在报错中折磨. 在新建工程前,新建文件夹管理文件 打开quartus,新建 ...
- 【FPGA】: ip核——Fir滤波器
文章目录 一.简介 二. ip核的端口说明 三. ip核的生成 四. 典型示例 五.结果展示 六. 参考资料 一.简介 FIR 滤波器之内插 FIR 滤波器Interpolated FIR Filte ...
- 【FPGA基础】关于FPGA的IP核概念
IP核介绍 IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的.具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中. IP核模 ...
- 基于FPGA的IP核RAM的设计和调用
介绍IP核: IP(知识产权)核将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器,SDRAM控制器,PCI接口等做成一个"黑盒"或者可修改参数的模块,供设计者使用.IP核包 ...
- FPGA之IP核的使用、搞懂功能仿真和时序仿真
因为我也是初学者,我把自己学习中的一个过程给写下来,希望对他人能有一点帮助.相信很多人一开始和我一样对功能仿真和时序仿真(后仿真)都模模糊糊,其实功能仿真是为了验证你的代码是否正确,而时序仿真则是添加 ...
最新文章
- OSI第六层:表示层功能作用
- AI大神李沐B站走红!连博导们都在追更,还亲自带你逐段读懂论文,网友:带B站研究生吧...
- Android -- onMeasure()源码分析
- 电脑 计算机服务打不开怎么办理,电脑xlsx打不开怎么办
- 你是合格的程序员吗?(欢迎大家自测)
- redhat6.5 配置使用centos的yum源
- JAVA运行时异常及检查式异常
- Buildroot 龙芯1C支持指南
- [转载] python模板字符串和格式化字符串
- 祖冲之算法c语言实现,3GPP机密性和完整性算法规范128-EEA3和128-EIA3(二)----祖冲之算法的C语言实现...
- 【层级多标签文本分类】融合标签层级结构的文本分类
- CSS加粗知识与案例
- 直播保存历史视频html,如何点播历史直播视频?
- Could not instantiate the executor. Make sure a planner module is on the classpath
- 内存溢出(OOM)及解决方案
- RabbitMQ入门 -- 阿里云服务器安装RabbitMQ
- android 类似苹果底部弹框,Android 仿苹果底部弹出Dialog
- docset文件,aviary sdk,一个bug
- Apsara Clouder基础技能认证-阿里巴巴编程规范考试流程
- 基于神经网络 lstm的股票开盘价收盘价预测详细
热门文章
- 计算机每年有多少博士毕业,国内每年有多少博士毕业?其中又有多少博士能达到“年薪百万”?...
- java中的反斜杠报错,老生常谈java路径中的反斜杠和斜杠的区别
- cuda并行归约算法(不断优化过程)
- gitlab与Jenkins
- 力扣 -- 309. 最佳买卖股票时机含冷冻期
- 自制用于放置钙铀云母的铅盒
- ColorSnapper2 for Mac(屏幕取色软件)
- CYGwin/Centos7下安装Goaccess
- 实战PyQt5: 154-QChart图表之多坐标轴图表
- 从雨水切换到家辉,我的昵称切换