精华内容
下载资源
问答
  • Xilinx_FIFO_Vivado_IP使用

    2021-02-22 21:53:57
    Xilinx_FIFO_Vivado_IP使用 FIFO介绍 FIFO(first in first out)是一个先进先出的存储队列。一般的作用是作为数据的队列通道,让数据暂时缓存,以等待读取。和其他RAM不同的是FIFO没有地址,先入先出。 在FPGA的设计...

    Xilinx_FIFO_Vivado_IP使用

    FIFO介绍

    FIFO(first in first out)是一个先进先出的存储队列。一般的作用是作为数据的队列通道,让数据暂时缓存,以等待读取。和其他RAM不同的是FIFO没有地址,先入先出。
    在FPGA的设计中,不同模块之间的数据接口,尤其是不同时钟系统的各个模块之间的数据接口是系统设计的一个关键。用异步FIFO模块来实现接口,接口双方都在自己的时钟下工作,他们之间不需要互相握手,只需要跟接口FIFO模块进行交互即可向FIFO模块中写入数据或从FIFO模块中读出数据。

    FIFO建立

    使用FIFO接口是Xilinx公司提供的IP核,经过充分测试和优化,系统运行稳定且占用的FPGA内部资源非常少。
    主要步骤如下:(主要针对理解Native端口类型)

    (1)在IP Catalog窗口下,输入FIFO进行IP查找
    在这里插入图片描述
    (2)进入FIFO配置页面
    其中该版本的手册,在下一页面Customize IP页面点击Documentation获取,component name对定制IP核命名。

    展开全文
  • vivado fifo

    2021-03-16 16:50:20
    vivado fifo ip核的调用及使用 使用宏定制fifo时需要注意“深度”参数的设置值及实际值:差值为2 使用到的控制信号主要有:满信号、将满信号、空信号、将空信号; 下图是使用控制信号完成的读写端口的逻辑代码。 ...

    vivado fifo ip核的调用及使用

    使用宏定制fifo时需要注意“深度”参数的设置值及实际值:差值为2
    在这里插入图片描述

    使用到的控制信号主要有:满信号、将满信号、空信号、将空信号;
    下图是使用控制信号完成的读写端口的逻辑代码。
    在这里插入图片描述

    展开全文
  • VIVADO FIFO 控制器

    2019-03-13 11:32:25
    32位数据进入16位数据输出,fifo读写操作代码,简单控制器。
  • FIFO应用:1、在千兆以太网数据写入,往DDR3里面写数据时候2、AD采样时钟和内部时钟不同时,需要FIFO进行转换3、同频异相时也需要用FIFO进行转换VivadoFIFO generator的配置方法1、2、standard FIFOread mode读取...

    FIFO应用:

    1、在千兆以太网数据写入,往DDR3里面写数据时候

    2、AD采样时钟和内部时钟不同时,需要FIFO进行转换

    3、同频异相时也需要用FIFO进行转换

    Vivado中FIFO generator的配置方法

    1、

    2、standard FIFO

    read mode读取时会延迟一个周期时钟,first word fall through

    read mode 读取时没有延时时钟周期,给使能就有数据,read latency=0。

    3、

    read data count表示fifo中有多少个数据了。

    异步FIFO实现

    具体实现代码:

    `timescale 1ns / 1ps

    //

    // Company:

    // Engineer:

    //

    // Create Date: 2016/08/10 14:42:33

    // Design Name:

    // Module Name: fifo_timing

    // Project Name:

    // Target Devices:

    // Tool Versions:

    // Description:

    //

    // Dependencies:

    //

    // Revision:

    // Revision 0.01 - File Created

    // Additional Comments:

    //

    //

    module fifo_timing(

    inputwiresclk,

    inputwirerst_n,

    inputwirer_clk,

    inputwiredata_v,

    inputwire[7:0]data_in,

    outputwiredata_ov,

    outputwire[15:0]data_out,

    output wirefifo_w_clk,

    outputwirefifo_r_clk,

    outputwirefifo_w_en,

    outputwire[7:0]fifo_w_data,

    inputwirefifo_full,

    outputwirefifo_r_en,

    inputwire[15:0]fifo_r_data,

    inputwirefifo_empty,

    inputwire[8:0]fifo_rd_count

    );

    wirefull;

    wireempty;

    // r_clk

    regr_flag;

    wire[8:0]rd_data_count;

    reg[8:0]r_cnt;

    wirerd_en;

    assign fifo_w_clk = sclk;

    assign fifo_r_clk = r_clk;

    assign fifo_w_en = data_v & (~fifo_full);

    assign fifo_w_data = data_in;

    assign fifo_r_en = r_flag & (~fifo_empty);

    assign data_out = fifo_r_data;

    assign data_ov = r_flag;

    assignrd_en = r_flag;

    always @(posedge r_clk or negedge rst_n)

    if(rst_n == 1'b0)

    r_flag <= 1'b0;

    else if(r_flag == 1'b1 && r_cnt == 'd255 )

    r_flag <= 1'b0;

    else if(fifo_rd_count >= 'd255 && r_flag == 1'b0)

    r_flag <= 1'b1;

    always @(posedge r_clk or negedge rst_n)

    if(rst_n == 1'b0)

    r_cnt <='d0;

    else if(r_flag == 1'b1)

    r_cnt <= r_cnt + 1'b1;

    else

    r_cnt <='d0;

    assigndata_ov = r_flag;

    endmodule

    展开全文
  • 基于Vivado2018的fifo

    2021-03-17 23:12:49
    主要展示如何在Vivado2018.4上使用fifo的IP核,并使用fifo
  • 附件是vivado 2018的 fifo source code 对vivado ip 源代码有兴趣,可联系邮箱fpgahelloworld@126.com
  • vivadoFIFO IP核

    千次阅读 2020-04-26 18:06:14
    这是vivadofifo的界面

    这是vivado中fifo的界面
    在这里插入图片描述
    下面依次介绍每个设置:


    1.基本设置


    在这里插入图片描述
    fifo实现的方式有Common Clock同步和Independent Clocks异步两种,每种fifo下有四种存储形式:

    Block RAM:使用FPGA内部的RAM
    Distributed RAM:分布式RAM,使用内部的LUT和逻辑电路组成的fifo,
                    当深度不大于128时可以使用
    shift Register:移位寄存器形式,深度不大于32时可以使用
    Built-in:内部自带的fifo,深度大于128可以使用
    

    2.本地端口


    Read Mode 读模式
        Standard FIFO 标准FIFO (选择这个模式,读出的数据会滞后读使能信号一个时间周期)
        First Word Fall Through 第一个写入数据将被从ram中提前读出到读数据线,
                               第一个数据有效与empty无效同时,即当empty无效时,
                               不必读取,数据线上的数据已经有效,读信号有效后,
                               读数据线将显示下一数据地址(读出的数据与读使能信号同一个时间周期)
    
    Data Port Parameters   数据接口参数
    	write width    写宽度
    	write depth    写深度
    	read width    读宽度
    	read depth    读深度
    	(后面读的设置通常与写的设置相同)
    
    Initialization 初始化
    	Reset Pin    复位引脚
    	Enable safety Circuit    启用安全电路  一般都要选上
    	Reset Type   复位类型,有两种
    	        异步复位和同步复位
        Full Flag Reset Value 复位的值,0为低电平复位,1为高电平复位
        
    
    

    3.标志位设置


    optional flag    选择的标志
        Almost Full Flag    几乎满标志位
        Almost Empty Flag    几乎空标志位
    Handshaking Options  握手选项   用于设计什么时候读,什么时候写
        write port handshaking 
        	write acknowledge    写标志位  分为高有效和低有效
        	overflow    溢出标志
        Read port handshaking 
        	valid flag    有效读
        	underflow flag    读空标志
    Programmable Flags  自定义标志位     用于自定义什么是否写满和什么时候读空的标准
    	programmable full type  
    
    

    在整个IP文件夹中,.veo文件为模板文件,复制时使用这个

    读写FIFO的操作

    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/07/29 18:49:24
    // Design Name: 
    // Module Name: fifo_test
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //////////////////////////////////////////////////////////////////////////////////
    
    
    module fifo_test(
        input clk,
        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产生100MHz时钟
        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复位后等待计数器
        wire valid;      // 指示读数据有效
    
        reg reset_rd;
    
        //例化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 <= W_IDLE;
            else
                write_state <= next_write_state;
        end
    
        always@(*) begin
            case(write_state)
                W_IDLE: begin
                    if(wcnt == 8'd79) //复位后等待一定时间,等待最慢时钟60周期,只针对xilinx来说
                        next_write_state <= W_FIFO;
                    else
                        next_write_state <= W_IDLE;
                    end
                W_FIFO:
                    next_write_state <= W_FIFO; //一直在写FIFO状态
                default: next_write_state <= W_IDLE;
            endcase
        end
    
    
        //在IDLE状态下,也就是复位之后,计数器计数
        always@(posedge wr_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n)
                wcnt <= 8'd0;
            else if (write_state == W_IDLE)
                wcnt <= wcnt + 1'b1 ;
            else
                wcnt <= 8'd0;
        end
    
    
        reg [7:0] wr_timer;
        always@(posedge wr_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n ) 
                wr_timer <= 0;
            else if (next_write_state == W_FIFO) 
                wr_timer <= wr_timer + 1'b1;
            else if (wr_timer == 8'd49) 
                wr_timer <= 8'd0;
        end
    
    
        //在写FIFO状态下,如果不满就向FIFO中写数据
        assign wr_en = (write_state == W_FIFO && wr_timer == 8'd49) ? ~full : 1'b0;
        //在写使能有效情况下,写数据值加1
        always@(posedge wr_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n)
                w_data <= 16'd1;
            else if (wr_en)
                w_data <= w_data + 1'b1;
        end
    
    
    
        /* 读FIFO状态机 */
        localparam R_IDLE = 1 ;
        localparam R_FIFO = 2 ;
        reg[2:0] read_state;
        reg[2:0] next_read_state;
        ///产生FIFO读的数据
        always@(posedge rd_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n)
                read_state <= R_IDLE;
            else
                read_state <= next_read_state;
        end
    
        always@(*) begin
            case(read_state)
                R_IDLE: begin
                    if (rcnt == 8'd59) //复位后等待一定时间, 等待最慢时钟60周期,只针对xilinx来说
                        next_read_state <= R_FIFO;
                    else
                        next_read_state <= R_IDLE;
                end
                R_FIFO:
                    next_read_state <= R_FIFO ; //一直在读FIFO状态
                default: next_read_state <= R_IDLE;
        endcase
        end
    
        //在IDLE状态下,也就是复位之后,计数器计数
        always@(posedge rd_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n)
                rcnt <= 8'd0;
            else if (write_state == W_IDLE)
                rcnt <= rcnt + 1'b1 ;
            else
                rcnt <= 8'd0;
        end
    
        reg [7:0] rd_timer;
        always@(posedge rd_clk or negedge fifo_rst_n) begin
            if(!fifo_rst_n ) begin
                rd_timer <= 0;
                reset_rd <= 1;
            end
            else if (next_read_state == R_FIFO) begin
                reset_rd <= 0;
                rd_timer <= rd_timer + 1'b1;
            end
            else if (rd_timer == 8'd99) begin
                reset_rd <= 1;
                rd_timer <= 8'd0;
            end
        end
        //在读FIFO状态下,如果不空就从FIFO中读数据
        assign rd_en = (read_state == R_FIFO && rd_timer == 8'd99 ) ? ~empty : 1'b0;
    
        wire almost_full, wr_ack, overflow, almost_empty, underflow, wr_rst_busy, rd_rst_busy;
    
        //实例化FIFO
        fifo_generator_0 fifo_ip_inst 
        (
        .rst (~fifo_rst_n || reset_rd ), // input rst
        .wr_clk (wr_clk ), // input wr_clk
        .rd_clk (rd_clk ), // input rd_clk
        .din (w_data ), // input [15 : 0] din
        .wr_en (wr_en ), // input wr_en
        .rd_en (rd_en ), // input rd_en
        .dout (r_data ), // output [15 : 0] dout
        .full (full ), // output full
        .almost_full(almost_full),      // output wire almost_full
        .wr_ack(wr_ack),                // output wire wr_ack
        .overflow(overflow),            // output wire overflow
        .empty (empty ), // output empty
        .almost_empty(almost_empty),    // output wire almost_empty
        .valid(valid),                  // output wire valid
        .underflow(underflow),          // output wire underflow
        .rd_data_count (rd_data_count), // output [8 : 0] rd_data_count
        .wr_data_count (wr_data_count), // output [8 : 0] wr_data_count
        .wr_rst_busy(wr_rst_busy),      // output wire wr_rst_busy  为0是才能开始读写
        .rd_rst_busy(rd_rst_busy)      // output wire rd_rst_busy
        );
    
    endmodule
    
    

    标准的读操作
    标准的读操作
    FWFT的标准的读操作
    FWFT的标准的读操作
    对于复位来说
    在这里插入图片描述

    展开全文
  • Vivado FIFO IP核设置

    2021-01-14 10:51:35
    下面介绍vivadofifo生成步骤 1、打开ip核,搜索fifo 2、创建fifo 选择独立的时钟块ram。 3、 A、选择标准fifo或者frist word full模式,标准模式是数据延时一个时钟周期进入或者输出;frist word full...
  • Vivado FIFO IP核的使用

    千次阅读 2020-10-22 16:37:49
    一、Vivado FIFO IP核介绍 可以参考这篇文章,很详细: https://blog.csdn.net/weixin_42151221/article/details/103410556 下面是我的FIFO IP核的配置情况: 1、选择异步FIFO 2、设置写数据和读数据的位宽以及深度...
  • Vivado Stream FIFO IP设计,Vivado仿真工程
  • Vivado-FIFO Generator

    2021-01-29 19:13:04
    很全很详细的FIFO Generator IP核的使用规则 FIFO Generator IP核的使用 1 概述 (1)最大支持500M (2)支持三种接口:Native interface FIFOs、 AXI Memory Mapped interface FIFOs、 AXI4-Stream interface ...
  • vivado FIFO使用问题

    千次阅读 2019-03-13 10:09:15
    有读写时钟同时存在时,empty信号与读写计数信号才能正常工作
  • 本文介绍如何利用modelsim独立仿真vivado 的IP核(以一个同步fifo为例) 2.准备工作 vivado的ip核仿真相对于altera的ip核仿真较为复杂。altera只需要在仿真的filelist中,添加altera_mf.v以及altera220_model.v,就...
  • 1.1 Vivado FIFO IP核接口信号介绍 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4)Vivado FIFO IP核接口信号介绍; 5)结束语。 1.1.2 本节引言 “不积跬步,无以至千里;不积小流,无以成...
  • Vivado IP核fifo使用指南

    万次阅读 多人点赞 2019-04-01 09:43:06
    下面介绍vivadofifo生成步骤 1、打开ip核,搜索fifo 2、创建fifo 选择独立的时钟块ram。 3、 A、选择标准fifo或者frist word full模式,标准模式是数据延时一个时钟周期进入或者输出;frist word full模式...
  • Vivado中异步FIFO的实现和使用

    千次阅读 2018-11-15 20:37:07
    Vivado中异步FIFO的实现和使用 FIFO应用: 1、在千兆以太网数据写入,往DDR3里面写数据时候2、AD采样时钟和内部时钟不同时,需要FIFO进行转换3、同频异相时也需要用FIFO进行转换 VivadoFIFO generator的配置...
  • FWFT:First Word Fall Through的缩写,好像是Xilinx的说法,Altera对应的概念... 需要注意的是当rdreq连续时,容易多读一个数据,所以读时需要对几乎空进行判读,在FIFO BFM的代码读任务里有如下代码:  if(fifo...
  • 使用 Quartus与vivado fifo IP核需要额外注意的几个点 IP different input and output width Quartus fifo different input and output width Writing 16-bit Words and Reading 8-bit Words This figure shows an ...
  • 网上尽管有各种介绍fifo的文章,但大部分没有一个完整的例程来练习,这里给出能够完整演示的fifo例程和仿真分析。工程文件虽然部分基于xilinx的官方例程,但官方例程没有testbench,这部分是自己编写的,并对不同的...
  • [2]Vivado中异步FIFO的实现和使用

    万次阅读 2017-01-17 10:34:17
    FIFO应用: 1、在千兆以太网数据写入,往DDR3里面写数据时候2、AD采样时钟和内部...VivadoFIFO generator的配置方法 1、 2、standard FIFO read mode读取时会延迟一个周期时钟,first word fall through r
  • FIFO generator core 支持 Native interface FIFOs, AXI Memory Mapped interface FIFOs 和AXI4-Stream interface FIFOs。 AXI Memory Mapped 和AXI4-Stream interface FIFOs 是由 Native interface FIFO 衍生出来...
  • vivado 仿真ram,rom和fifo

    千次阅读 2019-06-05 17:03:12
    FIFO、RAM、ROM学习文档 一、FIFO read latency问题 FIFO有两种读模式,第一种是标准fifo,这种模式下读使能为1之后,要延迟一个时钟周期之后fifo输出的第一个数据才是第一个写入fifo的数据。如下图所示: 蓝色...
  • 在使用Vivado进行开发的时候,有时候使用fifo会报如下严重警告[Common17-55] 'get_property' expects at least one object [ “k7_srio_prj.srcs/sources_1 /ip/fifo_generator_0 /fifo_generator_0 /fifo_generator...
  • vivado中例化fifo的IP核的时候,在native ports部分有两种模式可以选择,如下图所示: 这两种模式的主要区别是: 当选择Standard模式的时候,在读使能信号有效的下一个周期才能读出第一个有效的数据; 当...
  • Vivado联合modelsim仿真时modelsim进行异步FIFO仿真 1.生成fifo IP核如图所示,8位数据输入,深度1024,8位数据输出 2.编写testbench代码,进行仿真测试程序如下 module fifo_test_tb; reg Rst; reg Clk_wr; reg Wr_...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 165
精华内容 66
关键字:

fifovivado