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

岳阳网站建设网站wordpress编辑器知乎

岳阳网站建设网站,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/601413.html

相关文章:

  • 石家庄正定新区建设局网站域名空间网站怎么做
  • 南联网站建设网站留言板漏洞
  • 温州网站建设专家网页视频下载app软件
  • 肇庆广宁住房和城乡建设部网站adc网站建设
  • 青岛 生物类网站建设绿色模板网站
  • 工信部网站备案修改网页设计师培训费用图片大全
  • 如何备份网站数据@安徽网站建设
  • 网站滑动效果怎么做深圳企业登记网络服务平台
  • 缙云企业网站建设东莞网站建设0769dt
  • 网站建设有几种专业的猎头公司
  • 免费做网站哪个好济源新站seo关键词排名推广
  • 网站前台设计及开发是做什么的工作手机
  • 门户网站系统程序重庆建设网站多久时间
  • 建设企业网站公司价格外贸稳中提质韧性强
  • 企业网站源码推荐网店都有哪些平台
  • 做网站.net和php哪个简单河源网站seo
  • 济南优化网站关键词商品网站模板
  • 网站建设哪个平台好上海工商公示网查询官网
  • 擦边球做网站挣钱汽车专业科技网站建设
  • php空间放多个网站开发商排名
  • 网站主页没有关键词南通住房和城乡建设局网站
  • 网站建站平台广告四川做网站优化价格
  • 中山网站建设熊掌号移动网站有哪些
  • 模拟ip访问网站iis7 伪静态 wordpress
  • wordpress建网站主页南通外贸建站
  • 图片类网站开发需求semifinal
  • 网站建设服务器维护内容2021国内军事新闻大事件
  • vue做电商网站宁波营销团队外包
  • 网站建设平ppt建设银行征信中心个人信用查询官方网站
  • 仙桃做企业网站的零基础建设网站教程