vivado FIFO IP核的使用

FIFO是先进先出的数据缓存器。起到跨时钟域的数据缓冲作用,一般在实际应用过程当中采用异步读写的方式,

选择的配置如下

封装IP核

module clk_wiz(

        input    resetn         ,
        input    clk_in1        ,

        output   clk_out1       ,
        output   clk_out2       ,
        output   clk_out3       ,
        output   clk_out4       ,
        output   locked         

    );

clk_wiz_1 clk_inst
   (
    // Clock out ports
    .clk_out1(clk_out1),     // output clk_out1
    .clk_out2(clk_out2),     // output clk_out2
    .clk_out3(clk_out3),     // output clk_out3
    .clk_out4(clk_out4),     // output clk_out4
    // Status and control signals
    .resetn(resetn), // input resetn
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk_in1));      // input clk_in1

测试文件如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/03/12 16:51:42
// Design Name: 
// Module Name: sim_fifo
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module sim_fifo(

    );

reg          rst                        ;      
reg          wr_clk                     ;      
reg          rd_clk                     ;      
reg          [4 : 0] din                ;      
wire          wr_en                      ;      
wire          rd_en                      ;      
wire         [4 : 0] dout               ;
wire         full                       ;
wire         almost_full                ;
wire         wr_ack                     ;
wire         empty                      ;
wire         almost_empty               ;
wire         valid                      ;
wire         underflow                  ;
wire         [3 : 0] rd_data_count      ;
wire         [3 : 0] wr_data_count      ;
wire         wr_rst_busy                ;
wire         rd_rst_busy                ;


//读时钟
initial rd_clk = 1;
always#5 rd_clk = ~rd_clk;
 
//写时钟
initial wr_clk = 1;
always#25 wr_clk = ~wr_clk;
 
//读使能、写使能
assign wr_en = ((~rd_en) && (~full));
assign rd_en = ((~wr_en) && (~empty));
 
//写数据 
always @ ( posedge wr_clk ) begin
    if ( rst )
        din <= 5'd1;
    else if ( wr_en )
        din <= din + 1'b1;
end
 
initial begin
    rst = 1;
    #11;
    rst = 0;
 
end



fifo_top    fifo_top_inst(

                     .rst             (rst          )             ,
                     .wr_clk          (wr_clk       )             ,
                     .rd_clk          (rd_clk       )             ,
                     .din             (din          )             ,
                     .wr_en           (wr_en        )             ,
                     .rd_en           (rd_en        )             ,
                     .dout            (dout         )             ,
                     .full            (full         )            ,
                     .almost_full     (almost_full  )            ,
                     .wr_ack          (wr_ack       )            ,
                     .empty           (empty        )            ,
                     .almost_empty    (almost_empty )            ,
                     .valid           (valid        )            ,
                     .underflow       (underflow    )            ,
                     .rd_data_count   (rd_data_count)            ,
                     .wr_data_count   (wr_data_count)            ,
                     .wr_rst_busy     (wr_rst_busy  )            ,
                     .rd_rst_busy     (rd_rst_busy  )            

    );


endmodule

仿真结果如下:

收获:

使用了FIFO IP核,了解了FIFO各个引脚的含义,对IP核的设置有了一个基础的认知。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 14:00:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 14:00:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 14:00:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 14:00:04       18 阅读

热门阅读

  1. 备战蓝桥杯Day28 - 拼接最大数字问题

    2024-03-17 14:00:04       21 阅读
  2. 大数据开发(Hive面试真题-卷三)

    2024-03-17 14:00:04       22 阅读
  3. redis的安装,启动和关闭

    2024-03-17 14:00:04       19 阅读
  4. 最新2024年项目基金撰写与技巧及GPT融合应用

    2024-03-17 14:00:04       19 阅读
  5. Android中使用intent可以传递哪些类型的数据?

    2024-03-17 14:00:04       16 阅读
  6. Docker安装kafka

    2024-03-17 14:00:04       21 阅读
  7. Vue生命周期

    2024-03-17 14:00:04       18 阅读
  8. 22.4 docker

    2024-03-17 14:00:04       20 阅读
  9. 设计模式之工厂模式

    2024-03-17 14:00:04       17 阅读
  10. mysql读写分离及高可用集群常见问题

    2024-03-17 14:00:04       18 阅读
  11. yum repolist命令的介绍

    2024-03-17 14:00:04       19 阅读
  12. 每天学习一个Linux命令之route

    2024-03-17 14:00:04       16 阅读