一、Vivado FIFO IP核介绍
可以参考这篇文章,很详细:
https://blog.csdn.net/weixin_42151221/article/details/103410556
下面是我的FIFO IP核的配置情况:
1、选择异步FIFO
2、设置写数据和读数据的位宽以及深度
3、可以设置是否需要Almost Full Flag 或者 Almost Empty Flag
4、设置读写计数
该实例实现的功能是:分别以100MHZ和75MHZ的写读时钟进行写读FIFO,当然这里之所以设置读写频率不一样,是因为如果以上述频率进行操作,到后期会出现写满的情况,因为写数据的频率比读数据快,可以自行观察。
1、RTL代码
`timescale 1ns / 1ps
module fifo_test
(
input clk, //50MHz时钟
input rst_n //复位信号,低电平有效
);
reg [15:0] w_data ; //FIFO写数据
wire wr_en ; //FIFO写使能
wire rd_en ; //FIFO读使能
wire [15:0] r_data ; //FIFO读数据
wire full ; //FIFO满信号
wire empty ; //FIFO空信号
wire [8:0] rd_data_count ; //可读数据数量
wire [8:0] wr_data_count ; //已写入数据数量
wire clk_100M ; //PLL产生100MHz时钟
wire clk_75M ; //PLL产生75MHz时钟
wire locked ; //PLL lock信号,可作为系统复
//位信号,高电平表示lock住
wire fifo_rst_n ; //fifo复位信号, 低电平有效
wire wr_clk ; //写FIFO时钟
wire rd_clk ; //读FIFO时钟
reg [7:0] wcnt ; //写FIFO复位后等待计数器
reg [7:0] rcnt ; //读FIFO复位后等待计数器
//例化PLL,产生100MHz和75MHz时钟
clk_wiz_0 fifo_pll
(
// Clock out ports
.clk_out1(clk_100M), // output clk_out1
.clk_out2(clk_75M), // output clk_out2
// Status and control signals
.reset(~rst_n), // input reset
.locked(locked), // output locked
// Clock in ports
.clk_in1(clk) // input clk_in1
);
assign fifo_rst_n = locked ; //将PLL的LOCK信号赋值给fifo的复位信号
assign wr_clk = clk_100M ; //将100MHz时钟赋值给写时钟
assign rd_clk = clk_75M ; //将75MHz时钟赋值给读时钟
//*****************************************************************//
/* 写FIFO状态机 */
localparam W_IDLE = 1 ;
localparam W_FIFO = 2 ;
reg[2:0] write_state;
reg[2:0] next_write_state;
always@(posedge wr_clk or negedge fifo_rst_n)
begin
if(!fifo_rst_n)
write_state
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?