【牛客】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.hqwc.cn/news/529305.html

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

相关文章

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

HTML列表标签

文章目录 1. 无序列表2. 有序列表3. 自定义列表4. 标签分类4.1. 块级元素4.2. 行内元素4.3. 使用规则 1. 无序列表 ul 和 li 标签可以生成一个列表&#xff0c;也叫无序列表。 type 属性取值&#xff1a; disc 实心圆(默认值)circle 空心圆square 实心方块 我们来演示一下&…

寻寻觅觅,“老外记者”躲在哪里?

2024年2月27日发布的《新华社权威快报丨2024年全国两会新闻中心27日启用》称&#xff0c;目前已有3000多名中外记者报名采访全国两会&#xff0c;其中境内记者2000多名&#xff0c;港澳台记者和外国记者1000多名&#xff0c;中外记者报名数量较近几年有明显增长&#xff0c;两会…

夏目友人帐 唤石者与怪异的访客 2021.01.16

夏目友人帐 唤石者与怪异的访客 2021.01.16 1 唤石者 | 石起こし2 怪异的访客 | 怪しき来訪者 1 唤石者 | 石起こし 夏目在森林中邂逅小妖怪 ミツミ。据说它担任着把神祗的妖怪岩铁大人从沉睡中唤醒的「唤石」的职责。但是为了奖赏的美酒&#xff0c;猫老师和妖怪们开始策划夺取…

【原创教程】S7-1200配方程序编写方法

1 绪论 1.1 本文的目的 在生产中我们的一台设备往往需要 对应很多种不同工艺或不同尺寸的设备,这就要求我们设备的参数需要经常变化。我们将每一种产品对应的参数保存起来,下一次再生产同种产品时可以迅速一键调用,而不是一个一个的去设置,这种功能就叫做配方(Recipe)。…

ISP基础概述

原文来自ISP 和摄像头基本知识 本文主要介绍ISP&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f3…

【开源】RoboMaster 电调中心板 复刻

文件见附件&#xff0c;在此打开&#xff1a;

数字图像处理—python

pycahem终端也可以下载库&#xff0c;我只会用终端下载,用的镜像网站 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple. pip install matplotlib -i https://pypi.tuna.tsinghua.edu.c…

AWS Database Migration Service 助力数据库搬迁

在业务出海的过程中&#xff0c;少不了的就是云迁移&#xff0c;但在云迁移的过程中其中最重要的一环就是数据库。通常迁移的成功就取决于数据&#xff0c;如果应用成功搬迁&#xff0c;数据库没过来也是无用功。因此如何快速、安全的进行数据库搬迁也成为一大难题。九河云公司…

LVGL:渐变方案

仿照qt的QGradient::Preset渐变类型写的&#xff0c;因为lvgl只支持水平/垂直渐变&#xff0c;且只支持两种颜色的渐变&#xff0c;所以有些类型的渐变未能实现&#xff0c;有些则缺少中间颜色。 代码&#xff1a; namespace Gradient { enum Preset {WarmFlame 1,NightFade…

Servlet API 详细讲解

Servlet API 详细讲解 文章目录 Servlet API 详细讲解1. HttpServlet2.HttpServletRequest服务器如何获取到 query string 和 body 的数据 &#xff1f;&#xff1f; 3.HttpServletResponse API就是一组类和方法的集合&#xff0c;servlet 中的 类是非常多的&#xff0c;咱们只…

Sealos 是企业节省成本的终极武器

本文通过多维度&#xff0c;多场景对比来阐述 Sealos 为企业节省大量成本&#xff0c;结合一些现有客户具体的实际情况全面分析成本模型&#xff0c;企业可以根据自己的实际情况来对号入座&#xff0c;看是否适合使用 Sealos。 云操作系统节省成本核心体现在三个方面&#xff…