【牛客】VL68 同步FIFO

描述

请设计带有空满信号的同步FIFO,FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出,请在答案中添加并例化此部分代码。
电路的接口如下图所示。端口说明如下表。
接口电路图如下:

在这里插入图片描述

双口RAM端口说明:

端口名I/O描述
wclkinput写数据时钟
wencinput写使能
waddrinput写地址
wdatainput输入数据
rclkinput读数据时钟
rencinput读使能
raddrinput读地址
rdataoutput输出数据

同步FIFO端口说明:

端口名I/O描述
clkinput时钟
rst_ninput异步复位
wincinput写使能
rincinput读使能
wdatainput写数据
wfulloutput写满信号
remptyoutput读空信号
rdataoutput读数据

参考代码如下:

module dual_port_RAM #(parameter DEPTH = 16,parameter WIDTH = 8)(input wclk,input wenc,input [$clog2(DEPTH)-1:0] waddr  ,input [WIDTH-1:0] wdata        ,input rclk,input renc,input [$clog2(DEPTH)-1:0] raddr  ,output reg [WIDTH-1:0] rdata       
);reg [WIDTH-1:0] RAM_MEM [0:DEPTH-1];always @(posedge wclk) beginif(wenc)RAM_MEM[waddr] <= wdata;
end always @(posedge rclk) beginif(renc)rdata <= RAM_MEM[raddr];
end endmodule 

输入描述:

input clk ,
input rst_n ,
input winc ,
input rinc ,
input wdata ,

输出描述:

output reg wfull ,
output reg rempty ,
output wire rdata


`timescale 1ns/1ns/**********************************RAM************************************/
module dual_port_RAM #(parameter DEPTH = 16,parameter WIDTH = 8)(input wclk,input wenc,input [$clog2(DEPTH)-1:0] waddr  ,input [WIDTH-1:0] wdata      	,input rclk,input renc,input [$clog2(DEPTH)-1:0] raddr  ,output reg [WIDTH-1:0] rdata 		
);reg [WIDTH-1:0] RAM_MEM [0:DEPTH-1];always @(posedge wclk) beginif(wenc)RAM_MEM[waddr] <= wdata;
end always @(posedge rclk) beginif(renc)rdata <= RAM_MEM[raddr];
end endmodule  /**********************************SFIFO************************************/
module sfifo#(parameter	WIDTH = 8,parameter 	DEPTH = 16
)(input 					clk		, input 					rst_n	,input 					winc	,input 			 		rinc	,input 		[WIDTH-1:0]	wdata	,output reg				wfull	,output reg				rempty	,output wire [WIDTH-1:0]	rdata
);localparam DEPTH_WIDTH = $clog2(DEPTH);reg [DEPTH_WIDTH : 0] 	rd_ptr_r = 'd0, wr_ptr_r = 'd0;wire fifo_wenc_s, fifo_renc_s;
wire [WIDTH-1:0] fifo_wdata_s, fifo_rdata_s;
reg [WIDTH-1:0] rdata_r;
reg fifo_wenc_r = 1'b0;assign fifo_wenc_s = ~wfull & winc;
assign fifo_renc_s = ~rempty & rinc;
assign fifo_wdata_s = wdata;
assign rdata = fifo_rdata_s; // always @(posedge clk, negedge rst_n) begin
// 	if (~rst_n) begin
// 		rdata_r <= 'd0;
// 		fifo_wenc_r <= 1'b0;
// 	end else begin
// 		fifo_wenc_r <= fifo_wenc_s;
// 		if (fifo_wenc_r) begin
// 			rdata_r <= fifo_rdata_s;
// 		end
// 	end
// endalways @(posedge clk, negedge rst_n) beginif (~rst_n) beginwr_ptr_r <= 'd0;end else beginif (~wfull & winc) beginwr_ptr_r <= wr_ptr_r + 1;endend
endalways @(posedge clk, negedge rst_n) beginif (~rst_n) beginrd_ptr_r <= 'd0;end else beginif (~rempty & rinc) beginrd_ptr_r <= rd_ptr_r + 1;endend
endalways @(posedge clk, negedge rst_n) beginif (~rst_n) beginrempty <= 'd0;wfull <= 'd0;end else beginrempty <= (rd_ptr_r == wr_ptr_r);wfull <= (rd_ptr_r[DEPTH_WIDTH] != wr_ptr_r[DEPTH_WIDTH]) && (rd_ptr_r[DEPTH_WIDTH - 1 : 0] == wr_ptr_r[DEPTH_WIDTH - 1 : 0]);end
enddual_port_RAM #(.DEPTH(DEPTH),.WIDTH(WIDTH)
) dual_port_RAM_inst(									 .wclk(clk)								,.wenc(fifo_wenc_s)						,.waddr(wr_ptr_r[DEPTH_WIDTH - 1 : 0]) 	,.wdata(fifo_wdata_s)      				,.rclk(clk)								,.renc(fifo_renc_s)						,.raddr(rd_ptr_r[DEPTH_WIDTH - 1 : 0]) 	,.rdata(fifo_rdata_s) 		
);endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker容器的数据卷

1配置数据卷 docker run --namen01 -d --restartalways -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx 2Docker应用部署 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:5.6 3创建容器&#xff0c; 设置端口映射、目录映射 d…

GEE:基于ERA5数据集(U和V风速分量)计算风速的幅值和风向

作者:CSDN @ _养乐多_ 本文将介绍使用Google Earth Engine (GEE)平台提供的API加载ERA5月度数据集,该数据集包含了从1979年至今的全球月度气象数据。然后,定义了一个数据计算函数,用于将U和V风速分量转换为风速的幅值和风向。 结果如下图所示, 文章目录 一、核心函数1…

计算机设计大赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…

力扣--76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如…

外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷&#xff0c;也叫外边距折叠&#xff0c;在普通文档流中&#xff0c;在垂直方向上的2个或多个相邻的块级元素&#xff08;父子或者兄弟&#xff09;外边距合并成一个外边距的现象&#xff0c;不过只有上下外边距才会有塌陷&#x…

有什么针对新闻媒体行业的安全解决方案

对媒体行业而言&#xff0c;门户网站是最易受到攻击的地方。常见的攻击方式有网页篡改、挂马和被植入暗链等。门户网站作为新闻媒体对外的第一扇门&#xff0c;通常承载了大量的流量&#xff0c;一旦遭到攻击&#xff0c;造成的影响会更具有可怕的“传播力”。那么我们应该如何…

搭建一款实用的个人IT工具箱——it-tools

一、it-tools介绍 IT-Tools是一款开源的个人工具箱&#xff0c;专为IT从业人员打造&#xff0c;支持Docker私有化部署&#xff0c;包含众多实用的IT工具。其功能丰富多样&#xff0c;涵盖二维码生成、数据格式转换、MAC地址生成等&#xff0c;可满足用户多样化的需求。 二、本…

开源的python代码分析工具介绍

本文将为您详细讲解开源的 Python 代码分析工具&#xff0c;以及它们的特点、区别和应用场景。Python 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Python 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. Pylint 特点 - 用于检查 Python…

怎么在学习强国网上发布文章,学习强国投稿发稿方法途径,附学习强国多少钱价格明细表

学习强国是一款受用户欢迎的学习软件&#xff0c;许多人希望在其平台上发布自己的文章&#xff0c;以分享和传播自己的学习成果和心得体会。那么&#xff0c;怎么在学习强国网上发布文章呢&#xff1f;接下来&#xff0c;我们将介绍一些投稿发稿的方法和途径。 首先&#xff0c…

Feed、RSS、Atom概念对比及ROME实战

概述 在豆瓣等网站里&#xff0c;经常会看到如下订阅Button&#xff1a; 本文记录一下相关概念学习成果。 Feed Feed&#xff1a;消息来源&#xff0c;一种资料格式&#xff0c;网站通过它将最新资讯传播给用户。用户能够订阅某网站的前提条件是网站有提供Feed。Feed被很多…

方程式工具包远程溢出漏洞图形界面版V0.3(内置永恒之蓝、永恒冠军、永恒浪漫等)

Part1 前言 大家好&#xff0c;我是ABC_123。我从年前到现在&#xff0c;一直在整理曾经写过的红队工具&#xff0c;逐步把自己认为比较好用的原创工具发出来给大家用一用&#xff0c;方便大家在日常的攻防比赛、红队评估项目中解放双手&#xff0c;节省时间精力和体力。本期给…

Linux智能网关结合Node-RED实现实时工业数据采集

工业4.0的发展&#xff0c;物联网技术在制造业中的应用越来越广泛。其中&#xff0c;基于Linux系统的工业物联网智能网关因其开放性、稳定性和安全性而备受青睐。这类智能网关创新性地集成了开源工具Node-RED&#xff0c;为从各种工业设备&#xff08;如PLC&#xff09;中高效收…

LInux系统架构----Apache与Nginx动静分离

LInux系统架构----Apache与Nginx动静分离 一.动静分离概述 Nginx的静态处理能力比较强&#xff0c;但是动态处理能力不足&#xff0c;因此在企业中常采用动静分离技术在LNMP架构中&#xff0c;静态页面交给Nginx处理&#xff0c;动态页面交给PHP-FPM模块处理。在动静分离技术…

elementui的el-upload图片上传到服务器的对象储存cos并且展示出来

目录 0.前提1.准备工作1.买一个腾讯云服务器&#xff08;你可以买其他的&#xff09;&#xff0c;我这里是去买了61元一年的轻量级应用云服务器&#xff0c;操场系统是宝塔Linux2.买一个对象储存cos&#xff08;这里腾讯云可以不用购买&#xff0c;因为开通的时候可以有180天的…

单链表的基本操作--增删改查

增删改查 #include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0 typedef int Status; typedef char ElemType;typedef struct Lnode {ElemType data; //结点的数据域struct Lnode* next; //节点的指针域 }Lnode,*LinkList;初始化 Status InitLis…

【PCL】(二十八)超体素聚类分割点云

&#xff08;二十九&#xff09;超体素聚类分割点云 论文&#xff1a;Voxel Cloud Connectivity Segmentation - Supervoxels for Point Clouds supervoxel_clustering.cpp #include <pcl/console/parse.h> #include <pcl/point_cloud.h> #include <pcl/poin…

重启 explorer 进程的正确做法(二)

重启资源管理器进程的方法不唯一&#xff0c;但长期以来大家对实施方法用的不到位。 在上一篇中我认为&#xff1a;“我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe )&#xff0c;其实这是不正确的。我…

21 卷积层里的多输入多输出通道【李沐动手学深度学习v2课程笔记】

目录 1. 多输入输出通道&相应代码实现 1.1 多输入 1.2 多输出 1.3 1x1 卷积层 1.4 小结 1. 多输入输出通道&相应代码实现 1.1 多输入 为了加深理解&#xff0c;我们实现一下多输入通道互相关运算。 简而言之&#xff0c;我们所做的就是对每个通道执行互相关操作&a…

CentOS 8启动流程

一、BIOS与UEFI BIOS Basic Input Output System的缩写&#xff0c;翻译过来就是“基本输入输出系统”&#xff0c;是一种业界标准的固件接口&#xff0c;第一次出现在1975年&#xff0c;是计算机启动时加载的第一个程序&#xff0c;主要功能是检测和设置计算机硬件&#xff…

题目:泡澡(蓝桥OJ 3898)

问题描述&#xff1a; 解题思路&#xff1a; 图解&#xff1a;&#xff08;以题目样例为例子&#xff09; 注意点&#xff1a;题目的W是每分钟最大出水量&#xff0c;因此有一分钟的用水量大于出水量则不通过。 补充&#xff1a;差分一般用于对一段区间每个元素加相同值&#x…