32.同步FIFO-IP核的调用

server/2024/9/24 4:40:07/

        (1)FIFO(First In First Out,即先进先出),是一种数据缓冲器,用来实现数据先入先出的读写方式。

        (2)FIFO存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会被使用,比如:多比特数据做跨时钟域处理、前后带宽不同步等都用到了FIFO。

       (3)FIFO根据读写时钟是否相同,可以分为SCFIFO(同步FIFO)和DCFIFO(异步FIFO)。

 (4)scfifo配置过程:

(5)scfifo的调用:

module scfifo
(input clk               ,input reset_n           ,input [7:0]data_in      ,input wr_en             ,input rd_en             ,output [7:0]data_out    ,output full             ,output empty            ,output [7:0]data_count       );scfifo_8x256 scfifo_8x256_inst (.clk            (clk           ),                // input wire clk.srst           (~reset_n      ),              // input wire srst.din            (data_in       ),                // input wire [7 : 0] din.wr_en          (wr_en         ),            // input wire wr_en.rd_en          (rd_en         ),            // input wire rd_en.dout           (data_out  ),              // output wire [7 : 0] dout.full           (full      ),              // output wire full.empty          (empty     ),            // output wire empty.data_count     (data_count)                // output wire [7 : 0] data_count
); endmodule

(6)仿真文件代码:

`timescale 1ns / 1psmodule scfifo_tb;reg                     clk         ;
reg                     reset_n     ;
reg         [7:0]       data_in     ;
reg                     wr_en       ;
reg                     rd_en       ;reg         [1:0]       cnt         ;wire        [7:0]       data_out    ;
wire                    full        ;
wire                    empty       ;
wire        [7:0]       data_count  ;scfifo scfifo_inst
(.clk        (clk       )     ,.reset_n    (reset_n   )     ,.data_in    (data_in   )     ,.wr_en      (wr_en     )     ,.rd_en      (rd_en     )     ,.data_out   (data_out  )     ,.full       (full      )     ,.empty      (empty     )     ,.data_count (data_count)      );initial clk = 1'd1;always #10 clk = ~clk;initial begin reset_n <= 1'd0;#21;reset_n <= 1'd1;#100_000;$stop;endalways@(posedge clk or negedge reset_n)if(!reset_n)cnt <= 2'd0;else if(cnt == 2'd3)cnt <= 2'd0;else cnt <= cnt + 2'd1;always@(posedge clk or negedge reset_n)if(!reset_n)wr_en <= 1'd0;else if(cnt == 2'd3 && rd_en == 1'd0)wr_en <= 1'd1;elsewr_en <= 1'd0;always@(posedge clk or negedge reset_n)if(!reset_n)data_in <= 8'd0;else if(data_in == 8'd255 && wr_en)data_in <= 8'd0;else if(wr_en  && (!full))data_in <= data_in + 8'd1;else data_in <= data_in;always@(posedge clk or negedge reset_n)if(!reset_n)rd_en <= 1'd0;else if(full && wr_en == 1'd0)rd_en <= 1'd1;else if(empty)rd_en <= 1'd0;else rd_en <= rd_en;endmodule

(7)仿真波形:


http://www.ppmy.cn/server/61094.html

相关文章

PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题&#xff1f;一、了解长事务阻塞的原因&…

前端混合开发框架大对比:React Native vs. Flutter vs. Ionic

随着移动互联网的迅速发展&#xff0c;越来越多的企业和个人开发者寻求快速构建跨平台移动应用的方法。传统的原生应用开发虽然强大&#xff0c;但其高成本和长周期让许多开发者望而却步。相比之下&#xff0c;混合开发框架因其高效、低成本和一次编写多次运行的优点而受到欢迎…

mac ssh连接工具

在Mac上&#xff0c;有多个SSH连接工具可供选择&#xff0c;这些工具根据其功能和适用场景的不同&#xff0c;可以满足不同用户的需求。以下是一些推荐的SSH客户端软件&#xff1a;12 iTerm2&#xff1a;这是一款功能强大的终端应用程序&#xff0c;提供了丰富的功能和定制选项…

解决vue多层弹框时存在遮挡问题

本文给大家介绍vue多层弹框时存在遮挡问题&#xff0c;解决思路首先想到的是找到对应的遮挡层的css标签&#xff0c;然后修改z-index值&#xff0c;但是本思路只能解决首次问题&#xff0c;再次打开还会存在相同的问题&#xff0c;故该思路错误&#xff0c;下面给大家带来一种正…

连接docker私有仓库

连接docker私有仓库 连接192.168.55.242上的docker仓库&#xff08;k8s集群中主从节点都需要连接&#xff09; 两种方法&#xff1a; 修改 /etc/docker/daemon.json 增加语句 “insecure-registries”:[“192.168.55.242:30005”] 这里daemon.json中内容为&#xff1a; {…

设计模式03-组合模式

设计模式中的组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式的核心思想是将单个对象和组合对象放在一个统一的结构中&#xff0c;从而使得客户端能够以一致的方式处…

Github 2024-07-12 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-07-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Android开源轻量级流媒体前端 创建周期:3158 天开发语言:Java协议类型:GNU General Public License v3.0Star数量:28641 个Fork数…

排序之冒泡排序

冒泡排序 原始思想 bool bubble(int* arr, int lo, int hi) {bool sorted true;while (lo < hi) {if (arr[lo - 1] > arr[lo]) {mySwap2(arr[lo - 1], arr[lo]);sorted false;}}return sorted; } void bubbleSort(int* arr, int lo, int hi) {while (!bubble(arr, lo…