Xilink 简单双口ram ip的读写仿真

news2024/11/20 2:22:12

        简单双口RAM有两个端口Port A和port B,其中Port A用于写数据,Port B用于读数据,读写接口可以独立时钟工作。这一点和真双口RAM是有区别的,真双口RAM的A B两个Port都可以进行读写操作。        

         RAM是FPGA中重要的数据结构,可用于数据的缓存和跨时钟域信号处理。本文就xilink 的简单双口RAM 进行读写测试。

         本文对简单双口RAM做如下仿真:先对Port A进行连续写操作128次,每次数据和地址加1,结束后开始从Port B口读对应128个地址的数据,读写时钟独立,对比读写数据是否一致。

仿真结果如下:

数据写入仿真

数据读出仿真,数据在地址变化后延迟一个时钟输出。

ram ip的设置如下

注意不要勾选 Primitives Output Regster,不然Port B数据会延迟两个周期。

简单双口RAM的接口定义如下

直接上代码 dual_ram_top.v

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/03/22 20:18:12
// Design Name: 
// Module Name: dual_ram_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module dual_ram_top(
	input clka,
	input clkb,
	input rst_n,
	output [7:0] doutb
    );

reg [7:0]dina;
reg [12:0] addra;

reg ena;
reg wea;
reg [3:0] wr_state;
always@(posedge clka or negedge rst_n) begin
	if(!rst_n) begin
		wr_state <= 4'd0;
		
		ena <= 1'b0;
		wea <= 1'b0;
		dina <= 8'd0;
		addra <= 13'd0;
	end
	else begin
		case(wr_state)
			4'd0:begin
				wr_state <= 4'd1;
				
				wea <= 1'b1; // 写使能
			end
			
			4'd1:begin
				wr_state <= 4'd2;
				
				addra <= 13'd0;
				dina <= 8'd0;
				ena <= 1'b1;
				
			end
			
			4'd2:begin
				if(addra == 13'd127) begin
					wr_state <= 4'd3;
					
					ena <= 1'b0;
					addra <= 13'd0;
					dina <= 8'd0;
				end
				else begin
					wr_state <= wr_state;
					
					addra <= addra + 13'd1;
					dina  <= dina + 8'd1;
					ena <= 1'b1;
				end
			end
			
			4'd3:begin // write end
				wr_state <= 4'd4;
				
				wea <= 1'b0; // 读使能
			end
			
			4'd4:begin
				wr_state <= wr_state;
			end
		endcase
	end
end

wire rd_start;
assign rd_start =(wr_state==4'd4)?1:0;

reg [12:0] addrb;
reg enb;

reg [3:0] rd_state;
always@(posedge clkb or negedge rst_n) begin
	if(!rst_n) begin
		rd_state <= 4'd0;
		
		enb <= 1'b0;
		addrb <= 13'd0;
	end
	else begin
		case(rd_state) 
			4'd0:begin
				if(rd_start) begin
					rd_state <= 4'd1;
					
					enb <= 1'd1;
					addrb <= 13'd0;
				end
				else begin
					rd_state <= rd_state;
					
					enb <= 1'd0;
					addrb <= 13'd0;
				end
			end
			
			4'd1:begin
				if(addrb == 13'd127) begin
					rd_state <= 4'd2;
					
					enb <= 1'd0;
					addrb <= 13'd0;
				end
				else begin
					rd_state <= rd_state;
					
					enb <= 1'd1;
					addrb <= addrb +13'd1;	
				end
			end
			
			4'd2:begin
				rd_state <= rd_state;
				
				enb <= 1'd0;
				addrb <= 13'd0;
			end
		endcase
	end
end

	
blk_mem_gen_0 blk_mem_gen_uut0 (
  .clka(clka),    // input wire clka
  .ena(ena),      // input wire ena
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addra),  // input wire [12 : 0] addra
  .dina(dina),    // input wire [7 : 0] dina
  .clkb(clkb),    // input wire clkb
  .enb(enb),      // input wire enb
  .addrb(addrb),  // input wire [12 : 0] addrb
  .doutb(doutb)  // output wire [7 : 0] doutb
);
endmodule

仿真测试代码ram_wr_top.v

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/03/22 22:27:59
// Design Name: 
// Module Name: ram_wr_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module ram_wr_top(
    );
	reg clka;
	reg clkb;
	reg rst_n;
	wire [7:0]doutb;
	
	localparam clk_prioda = 50;
	localparam clk_priodb = 20;
	
	initial begin
		clka =1'b0;
		clkb = 1'b0;
		rst_n = 1'b0;
		#(100)
			rst_n = ~rst_n;
	end
	
	always#(clk_prioda/2) clka = ~clka;
	always#(clk_priodb/2) clkb = ~clkb;
	
	dual_ram_top dual_ram_top_uut0(
	.clka(clka),
	.clkb(clkb),
	.rst_n(rst_n),
	.doutb(doutb)
	);
endmodule

通过连续读写对比 验证了IP读写的一致性。

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

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

相关文章

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)

EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测&#xff08;Matlab&#xff09; 目录 EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经…

阿里云4核16G服务器价格26.52元1个月、149.00元半年,ECS经济型e实例

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年&#xff0c;配置为阿里云服务器ECS经济型e实例ecs.e-c1m4.xlarge&#xff0c;4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接打开如下图&a…

【数据挖掘】实验4:数据探索

实验4&#xff1a;数据探索 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据探索&#xff0c;学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二&#xff1a;实验内容 1&#xff1a;数据质量分析 2&#xff1a;统计量分析 3&#xff1a;贡献度分析…

【黄啊码】如何用GPT和向量数据库做问答型AI

知识库服务依赖该数据库&#xff0c;Embedding 形式个性化训练 ChatGPT&#xff0c;必不可少的就是向量数据库 因为 qdrant 向量数据库只支持 Docker 部署&#xff0c;所以需要先安装好 Docker 服务。 命令行安装 拉取镜像 docker pull qdrant/qdrant 运行服务 docker run -…

查立得源码如何去除版权

最近发现很多人百度&#xff1a;查立得源码如何去除版权。 每个源代码/软件都是有版权的&#xff0c;无法去除&#xff0c;我们也得尊重知识产权/劳动成果。 可以去除/修改的是&#xff1a;页面显示的版权信息,查立得底部信息均可自定义(一般conn.php可修改)。 另&#xff1…

图床项目实战:后续开发与优化

在之前的文章中&#xff0c;我们介绍了图床项目的基本实现&#xff0c;接下来&#xff0c;我将提供扩展功能和优化性能的关键代码片段。 一、图片分类管理 首先&#xff0c;我们需要在数据库中创建分类表&#xff0c;并在图片表中添加分类字段。 class Category(db.Model): …

STM32---DHT11采集与BH1750FVI光照传感器(HAL库、含源码)

写在前面&#xff1a;本节我们学习使用两个常见的传感器模块&#xff0c;分别为DHT11温湿度传感器以及BH1750FVI光照传感器,这两种传感器在对于环境监测中具有十分重要的作用&#xff0c;因为其使用简单方便&#xff0c;所以经常被用于STM32的项目之中。今天将使用分享给大家&a…

会员中心微服务

文章目录 1.环境配置1.创建会员中心模块2.检查父子模块的pom.xml1.父模块注意&#xff1a;如果父模块中的依赖显示not found&#xff0c;原因是子模块并没有引用&#xff0c;不用在意 2.子模块 3.pom.xml 引入相关依赖&#xff08;别忘记刷新maven&#xff09;4.application.ym…

【保姆级教程】YOLOv8目标检测:训练自己的数据集

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple二、数据准备 2.1 安装labelme标注软件 pip install label…

主干网络篇 | YOLOv8更换主干网络之GhostNet

前言:Hello大家好,我是小哥谈。GhostNet是2019年由华为诺亚方舟实验室发布的轻量级网络,速度和MobileNetV3相似,但是识别的准确率比MobileNetV3高,在ImageNet ILSVRC2012分类数据集的达到了75.7%的top-1精度。该论文提除了Ghost模块,通过廉价操作生成更多的特征图。基于一…

如何用pytorch调用预训练Swin Transformer中的一个Swin block模块

1&#xff0c;首先&#xff0c;我们需要知道的是&#xff0c;想要调用预训练的Swin Transformer模型&#xff0c;必须要安装pytorch2&#xff0c;因为pytorch1对应的torchvision中不包含Swin Transformer。 2&#xff0c;pytorch2调用预训练模型时&#xff0c;不建议使用pretr…

Uibot6.0 (RPA财务机器人师资培训第3天 )财务招聘信息抓取机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博…

基于python+vue成都旅游网flask-django-php-nodejs

本篇论文对成都旅游网的需求分析、功能设计、系统设计进行了较为详尽的阐述&#xff0c;并对系统的整体设计进行了阐述&#xff0c;并对各功能的实现和主要功能进行了说明&#xff0c;并附上了相应的操作界面图。 语言&#xff1a;Python 框架&#xff1a;django/flask 软件版本…

阿里云幻兽帕鲁4核16G和8核32G服务器优惠价格

2024阿里云幻兽帕鲁专用服务器价格表&#xff1a;4核16G幻兽帕鲁专用服务器26元一个月、149元半年&#xff0c;默认10M公网带宽&#xff0c;8核32G幻兽帕鲁服务器10M带宽价格90元1个月、271元3个月。阿里云提供的Palworld服务器是ECS经济型e实例&#xff0c;CPU采用Intel Xeon …

3.22 ARM day7

实现三个按键的中断&#xff0c;现象和代码 include/key_inc.h&#xff1a; #ifndef __KEY_INC_H__ #define __KEY_INC_H__ #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1x…

部标JT808车辆定位监控平台单服务器13.6万接入压力测试记录(附源码)

之前经常有人问平台能支持多少设备同时在线&#xff0c;由于事情多没时间做。最近刚好有机会做下压力测试。在不间断的连续压测三天&#xff0c;最终结果为13.6万TCP连接&#xff0c;30秒上报频率。 一、测试目的 测试平台同时接入设备数量与并发处理能力。 二、准备环境 一…

阿里云幻兽帕鲁专用服务器创建教程,新手0基础

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

算法---前缀和练习-1(除自身以外数组的乘积)

除自身以外数组的乘积 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;创建两个辅助数组 f 和 g&#xff0c;它们的长度与 nums 相同。数组 f 用于存储每个元素左侧所有元素的乘积&#xff0c;数组 g 用于存…

常见研发设计软件的许可管理

大型工程软件如Ansys、CAD、Fluent、Unigraph、ProE、HyperWorks、UG/NX&#xff0c;minitab等安装需要经过注册程序Flexlm才可以使用&#xff0c;而Flexlm中涉及到很多知识、技巧&#xff0c;也存在许多问题。本篇文章就是针对上述软件安装中的常见问题作一些探讨与解决。莱曼…