当前位置: 首页 > wzjs >正文

秦皇岛建委网站推广技巧

秦皇岛建委网站,推广技巧,wordpress 加载,务川自治县建设局网站ZYNQ-PL实践课堂(四)IP核之FIFO) 1 概述2 程序2.1 FIFO IP核2.2 写FIFO模块2.3 读FIFO模块2.4 顶层例化模块 3 仿真总结 1 概述 FIFO在fpga应用过程相当于一个先进先出的缓冲器,跨时钟域传输信号传递,采用顺序写入数据…

ZYNQ-PL实践课堂(四)IP核之FIFO)

  • 1 概述
  • 2 程序
    • 2.1 FIFO IP核
    • 2.2 写FIFO模块
    • 2.3 读FIFO模块
    • 2.4 顶层例化模块
  • 3 仿真
  • 总结

1 概述

FIFO在fpga应用过程相当于一个先进先出的缓冲器,跨时钟域传输信号传递,采用顺序写入数据并顺序独处数据。
根据FIFO工作的时钟域可以分为同步FIFO和异步FIFO。

选择同步 FIFO: 只使用 wr_clk,所有的输入输出信号都同步于 wr_clk 信号;
选择异步 FIFO: 写端口同步于写时钟 wr_clk和读端口同步于读时钟 rd_clk。

FIFO的参数如下:

FIFO 宽度	: 一次读写操作的数据位 N;
FIFO 深度	: 存储多少个宽度为 N 位的数据;
将空标志		: 	即将被读空;
空标志		: 	已空时由 FIFO 的状态电路送出的一个信号;
将满标志		: 	即将被写满。
满标志		: 	已满或将要写满时由 FIFO 的状态电路送出的一个信号;
读时钟		:	读 FIFO 时所遵循的时钟,在每个时钟的上升沿触发。
写时钟		:	写 FIFO 时所遵循的时钟,在每个时钟的上升沿触发。

在这里插入图片描述

2 程序

2.1 FIFO IP核

选择IP Catalog添加FIFO,
在这里插入图片描述
Basic 设置异步FIFO,
在这里插入图片描述
设置写FIFO深度、写FIFO宽度、读FIFO宽度如下,
在这里插入图片描述
设定专用的输入口, 使用“即将写满”和“即将读空”这两个信号,
在这里插入图片描述
“Data Counts”设置 FIFO 内数据计数的输出信号,
在这里插入图片描述
Summary如下,
在这里插入图片描述

2.2 写FIFO模块

module fifo_wr(//mudule clockinput                  clk    ,           // 时钟信号input                  rst_n  ,           // 复位信号//FIFO interface       input                  almost_empty,      // FIFO将空信号input                  almost_full ,      // FIFO将满信号output    reg          fifo_wr_en ,       // FIFO写使能output    reg  [7:0]   fifo_wr_data       // 写入FIFO的数据
);//reg define
reg  [1:0]  state            ; //动作状态
reg  		almost_empty_d0  ;  //almost_empty 延迟一拍
reg  		almost_empty_syn ;  //almost_empty 延迟两拍
reg  [3:0]  dly_cnt          ; //延迟计数器
//*****************************************************
//**                    main code
//*****************************************************//因为 almost_empty 信号是属于FIFO读时钟域的
//所以要将其同步到写时钟域中
always@( posedge clk ) beginif( !rst_n ) beginalmost_empty_d0  <= 1'b0 ;almost_empty_syn <= 1'b0 ;endelse beginalmost_empty_d0  <= almost_empty ;almost_empty_syn <= almost_empty_d0 ;end
end//向FIFO中写入数据
always @(posedge clk ) beginif(!rst_n) beginfifo_wr_en   <= 1'b0;fifo_wr_data <= 8'd0;state        <= 2'd0;dly_cnt      <= 4'd0;endelse begincase(state)2'd0: begin if(almost_empty_syn) begin  //如果检测到FIFO将被读空state <= 2'd1;        //就进入延时状态end elsestate <= state;end 2'd1: beginif(dly_cnt == 4'd10) begin  //延时10拍//原因是FIFO IP核内部状态信号的更新存在延时//延迟10拍以等待状态信号更新完毕                   dly_cnt    <= 4'd0;state      <= 2'd2;     //开始写操作fifo_wr_en <= 1'b1;     //打开写使能endelsedly_cnt <= dly_cnt + 4'd1;end             2'd2: beginif(almost_full) begin        //等待FIFO将被写满fifo_wr_en   <= 1'b0;  //关闭写使能fifo_wr_data <= 8'd0;state        <= 2'd0;  //回到第一个状态endelse begin                 //如果FIFO没有被写满fifo_wr_en   <= 1'b1;  //则持续打开写使能fifo_wr_data <= fifo_wr_data + 1'd1;  //且写数据值持续累加endend default : state <= 2'd0;endcaseend
endendmodule

2.3 读FIFO模块

module fifo_rd(//system clockinput               clk ,        // 时钟信号input               rst_n ,      // 复位信号//FIFO interfaceinput        [7:0]  fifo_dout ,  // 从FIFO读出的数据input               almost_full ,// FIFO将满信号input               almost_empty,// FIFO将空信号output  reg         fifo_rd_en   // FIFO读使能
);//reg define
reg  [1:0]  state           ;  // 动作状态
reg         almost_full_d0  ;  // fifo_full 延迟一拍
reg  		almost_full_syn ;  // fifo_full 延迟两拍
reg  [3:0]  dly_cnt         ;  //延迟计数器//*****************************************************
//**                    main code
//*****************************************************//因为 fifo_full 信号是属于FIFO写时钟域的
//所以要将其同步到读时钟域中
always@( posedge clk ) beginif( !rst_n ) beginalmost_full_d0  <= 1'b0 ;almost_full_syn <= 1'b0 ;endelse beginalmost_full_d0  <= almost_full ;almost_full_syn <= almost_full_d0 ;end
end//读出FIFO的数据
always @(posedge clk ) beginif(!rst_n) beginfifo_rd_en <= 1'b0;state      <= 2'd0;dly_cnt    <= 4'd0;endelse begincase(state)2'd0: beginif(almost_full_syn)      //如果检测到FIFO将被写满state <= 2'd1;       //就进入延时状态elsestate <= state;end 2'd1: beginif(dly_cnt == 4'd10) begin  //延时10拍//原因是FIFO IP核内部状态信号的更新存在延时//延迟10拍以等待状态信号更新完毕dly_cnt <= 4'd0;state   <= 2'd2;        //开始读操作endelsedly_cnt <= dly_cnt + 4'd1;end2'd2: beginif(almost_empty) begin     //等待FIFO将被读空fifo_rd_en <= 1'b0;    //关闭读使能state      <= 2'd0;    //回到第一个状态endelse                       //如果FIFO没有被读空fifo_rd_en <= 1'b1;    //则持续打开读使能end default : state <= 2'd0;endcaseend
end

2.4 顶层例化模块

创建 源文件 ip_fifo.v,作为顶层模块,实现前三个模块信息交互。

module ip_fifo(input    sys_clk ,  // 时钟信号input    sys_rst_n  // 复位信号
);//wire define
wire         fifo_wr_en         ;  // FIFO写使能信号
wire         fifo_rd_en         ;  // FIFO读使能信号
wire  [7:0]  fifo_din           ;  // 写入到FIFO的数据
wire  [7:0]  fifo_dout          ;  // 从FIFO读出的数据
wire         almost_full        ;  // FIFO将满信号
wire         almost_empty       ;  // FIFO将空信号
wire         fifo_full          ;  // FIFO满信号
wire         fifo_empty         ;  // FIFO空信号
wire  [7:0]  fifo_wr_data_count ;  // FIFO写时钟域的数据计数
wire  [7:0]  fifo_rd_data_count ;  // FIFO读时钟域的数据计数//例化FIFO IP核
fifo_generator_0  fifo_generator_0 (.wr_clk        ( sys_clk            ),  // input wire wr_clk.rd_clk        ( sys_clk            ),  // input wire rd_clk.wr_en         ( fifo_wr_en         ),  // input wire wr_en.rd_en         ( fifo_rd_en         ),  // input wire rd_en.din           ( fifo_din           ),  // input wire [7 : 0] din.dout          ( fifo_dout          ),  // output wire [7 : 0] dout.almost_full   (almost_full         ),  // output wire almost_full.almost_empty  (almost_empty        ),  // output wire almost_empty.full          ( fifo_full          ),  // output wire full.empty         ( fifo_empty         ),  // output wire empty.wr_data_count ( fifo_wr_data_count ),  // output wire [7 : 0] wr_data_count	.rd_data_count ( fifo_rd_data_count )   // output wire [7 : 0] rd_data_count
);//例化 - 写FIFO模块
fifo_wr  u_fifo_wr(.clk            ( sys_clk    ),   // 写时钟.rst_n          ( sys_rst_n  ),   // 复位信号.fifo_wr_en     ( fifo_wr_en )  , // fifo写请求.fifo_wr_data   ( fifo_din    ) , // 写入FIFO的数据.almost_empty   ( almost_empty ), // fifo空信号.almost_full    ( almost_full  )  // fifo满信号
);//例化 - 读FIFO模块
fifo_rd  u_fifo_rd(.clk          ( sys_clk    ),      // 读时钟.rst_n        ( sys_rst_n  ),      // 复位信号.fifo_rd_en   ( fifo_rd_en ),      // fifo读请求.fifo_dout    ( fifo_dout  ),      // 从FIFO输出的数据.almost_empty ( almost_empty ),    // fifo空信号.almost_full  ( almost_full  )     // fifo满信号
);//例化 ILA IP核
ila_0  ila_0 (.clk    ( sys_clk            ), // input wire clk.probe0 ( fifo_wr_en         ), // input wire [0:0]  probe0  .probe1 ( fifo_rd_en         ), // input wire [0:0]  probe1 .probe2 ( fifo_din           ), // input wire [7:0]  probe2 .probe3 ( fifo_dout          ), // input wire [7:0]  probe3 .probe4 ( fifo_empty         ), // input wire [0:0]  probe4 .probe5 ( almost_empty       ), // input wire [0:0]  probe5 .probe6 ( fifo_full          ), // input wire [0:0]  probe6.probe7 ( almost_full        ), // input wire [0:0]  probe7 .probe8 ( fifo_wr_data_count ), // input wire [7:0]  probe8 .probe9( fifo_rd_data_count  )  // input wire [7:0]  probe9
);
endmodule 

3 仿真

TestBench 中只要送出时钟的复位信号。

`timescale 1ns / 1psmodule tb_ip_fifo( );// Inputsreg sys_clk;reg sys_rst_n;// Instantiate the Unit Under Test (UUT)ip_fifo  u_ip_fifo (.sys_clk         (sys_clk), .sys_rst_n       (sys_rst_n));//Genarate the clkparameter PERIOD = 20;always beginsys_clk = 1'b0;#(PERIOD/2) sys_clk = 1'b1;#(PERIOD/2);end   initial begin// Initialize Inputssys_rst_n = 0;// Wait 100 ns for global reset to finish#100  ;sys_rst_n = 1;// Add stimulus hereendendmodule

总结

本文介绍FIFO IP核及读写应用。

感谢阅读,祝君成功!
-by aiziyou

http://www.dtcms.com/wzjs/308221.html

相关文章:

  • 北京网站建设价格天网站的seo优化报告
  • 有那些是做批发的网站网站注册页面
  • 深圳网站建设吗媒体软文发布平台
  • 宛城区微网站建设谷歌seo优化
  • 国外知名设计网站大全中国唯一没有疫情的地方
  • 选一个网站做seo抖音关键词推广怎么做
  • 物流系统网站建设 的网站描述网站关键词优化应该怎么做
  • web渗透天津seo推广软件
  • wordpress79元主题南宁seo排名收费
  • wordpress建站教程主题免费建站的平台
  • 济南网站建设.com网站seo去哪个网站找好
  • 西安医疗网站制作7月新闻大事件30条
  • 婚庆门户源码v2.0 婚庆公司网站源码 婚庆网源码 婚庆门户网源码百度seo分析工具
  • 做什么网站最赚钱今日重大事件
  • 申请绿色网站谷歌优化
  • 句容网站定制seo外包公司优化
  • 东莞外贸网站的推广郑州热门网络推广免费咨询
  • 网站如何添加百度地图营销型企业网站推广的方法有哪些
  • 性价比高的vpsseo搜索引擎优化工资多少钱
  • 用香港服务器做网站违法吗网站排名优化软件
  • 做推广网站需要商标吗网址大全123
  • 网站图怎么做重庆网络营销
  • 智慧旅游平台建设方案广州网络seo优化
  • 做k12网站网络营销是干什么的
  • 手机网站的建设百度推广方式
  • 广西网站建设推广报价网络营销题库案例题
  • 网站建设怎么宣传石家庄网络推广
  • 什么是搜索引擎优化推广郑州推广优化公司
  • 深圳做装修网站费用多少钱灰色关键词排名
  • 网站上做404页面怎样做最新病毒感染什么症状