FPGA上板项目(三)——RAM测试

news2025/1/11 18:44:32

目录

  • 实验内容
  • 实验原理
  • 实验步骤
  • 实验用时序波形
  • HDL 代码
  • 仿真
  • 综合实现
  • 上板测试


实验内容

对 FPGA 内部的 RAM 进行数据读写操作。

实验原理

RAM (Random Access Memory),是可以进行数据交换的存储器,可读可写;而 ROM(Read-Only Memory)为只读存储器,只可读取不可写入。

实验步骤

  • 添加 Block Memory Generator IP核,选择 Simple Dual Port RAM,则代表使用两个独立端口,Port A 作为输入,Port B 作为输出。
    在这里插入图片描述
  • 关于 Port A 的设置:Width 代表数据位宽,Depth 代表可以存放的数据个数。
    在这里插入图片描述
  • 关于 Port B 的设置:Width 和 Depth 与端口A保持一致,勾选 Primitives Output Register 会在输出数据后加一级寄存器,输出会落后地址两个时钟,取消勾选则落后一个时钟。
    在这里插入图片描述
  • RAM 模块端口定义
信号名称方向说明
clkain端口A的时钟
weain端口A的写使能
addrain端口A的地址输入
dinain端口A的数据输入
clkbin端口B的时钟
addrbin端口B的地址输入
doutbout端口B的数据输出
  • 写时序图:在 wea 为高,同时 clka 为上升沿时,将数据 dina 写入地址 addra 中。

在这里插入图片描述

  • 读时序图:clkb 的上升沿时刻读取地址 addrb,并输出该地址对应的数据 doutb。由于是流水线作业,从时序上看,输出的数据 doutb 落后地址 addrb 一个时钟周期。

在这里插入图片描述

实验用时序波形

在这里插入图片描述

时序图说明:

  • wea 置高时,DINA、ADDRA 开始变化,从而开始写入数据,地址为 0 - 511,数据为 10 - 521。
  • 写入后的下一时刻便开始读取数据,地址从 0 - 511。

HDL 代码

module RAM#(
    parameter DATA_DEPTH = 'd512
)(
    input wire sys_clk_p,
    input wire sys_clk_n,
    input wire rst          // 同步低复位
);

/**********************************************
*********** IBUFDS 原语
**********************************************/
    IBUFDS IBUFDS_inst(
        .O(sys_clk),
        .I(sys_clk_p),
        .IB(sys_clk_n)
    );
    
/**********************************************
*********** 实例化 RAM
**********************************************/
    reg wea;
    reg [8:0] addra;
    reg [8:0] addrb;
    reg [31:0] dina;
    wire [31:0] doutb;
    
    ram_ip inst_ram (
      .clka(sys_clk),    // input wire clka
      .wea(wea),      // input wire [0 : 0] wea
      .addra(addra),  // input wire [8 : 0] addra
      .dina(dina),    // input wire [31 : 0] dina
      .clkb(sys_clk),    // input wire clkb
      .addrb(addrb),  // input wire [8 : 0] addrb
      .doutb(doutb)  // output wire [31 : 0] doutb
    );
    
/**********************************************
*********** 输入端信号赋值
**********************************************/
    // 赋值wea信号
    always@(posedge sys_clk) begin
        if(!rst) begin
            wea <= 1'b0;
        end
        else if(addra == DATA_DEPTH - 1) begin
            wea <= 1'b0;
        end
        else begin
            wea <= 1'b1;
        end
    end
    
    // 赋值dina信号
    always@(posedge sys_clk) begin
        if(!rst) begin
            dina <= 32'd10;
        end
        else if(dina >= DATA_DEPTH + 32'd9) begin
            dina <= DATA_DEPTH + 32'd9;
        end
        else if(wea) begin
            dina <= dina + 32'd1;
        end
    end
    
    // 赋值addra信号
    always@(posedge sys_clk) begin
        if(!rst) begin
            addra <= 9'd0;
        end
        else if(addra >= DATA_DEPTH - 9'd1) begin
            addra <= DATA_DEPTH - 32'd1;
        end
        else if(wea) begin
            addra <= addra + 9'd1;
        end
    end
    
/**********************************************
*********** 输出端信号赋值
**********************************************/
    // 赋值addrb信号
    always@(posedge sys_clk) begin
        if(!rst) begin
            addrb <= 9'd0;
        end
        else begin
            addrb <= addra;
        end
    end
    
/**********************************************
*********** 实例 ILA
**********************************************/
    ila_0 inst_ila(
        .clk(sys_clk), // input wire clk
        .probe0(wea), // input wire [0:0]  probe0  
        .probe1(addrb), // input wire [8:0]  probe1 
        .probe2(doutb) // input wire [31:0]  probe2
    );
endmodule

仿真

  • testbench 代码
module tb_RAM#(
    parameter DATA_DEPTH = 'd512
)();
/**********************************************
*********** 实例化模块
**********************************************/
    reg sys_clk_p;
    wire sys_clk_n;
    reg rst;
    RAM #(
        .DATA_DEPTH(DATA_DEPTH)
    )tb_RAM(
        .sys_clk_p(sys_clk_p),
        .sys_clk_n(sys_clk_n),
        .rst(rst)
    );

/**********************************************
*********** 初始化 clk、rst
**********************************************/
    // 初始化 clk
    assign sys_clk_n = ~sys_clk_p;
    initial begin
        sys_clk_p = 1;
        forever #2.5 sys_clk_p = ~sys_clk_p;   
    end
    
    // 初始化 rst
    initial begin
        rst = 0;
        #102.5;
        rst = 1;
    end

endmodule
  • 仿真结果:

在这里插入图片描述
在这里插入图片描述

综合实现

添加管脚和时序约束后,run synthesis 以及 run implementation,具体步骤可参考:FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试

上板测试

上板测试结果如下:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Docker一行命令安装MySQL

1 前言 在Linux系统中安装MySQL数据库是一件繁琐的事情&#xff0c;经常遇到各种问题&#xff0c;浪费大量时间。Docker的出现很好的解决这个问题&#xff0c;下面然我们来学习如何在Docker中用一行命令安装MySQL。 2 安装Docker 这里以CentOS系统为例&#xff0c;步骤非常简…

这4款专业的思维导图工具教你怎么快速制作脑图。

思维导图怎么制作&#xff1f;其实很简单&#xff0c;在制作思维导图之前&#xff0c;先要明确自己的导图主体&#xff0c;然后就可以去选择一个合适的工具&#xff0c;就可以开始制作。如果不知道如何挑选工具的话&#xff0c;我可以帮助大家列举几个。 1、福昕365脑图 传送门…

关于前端布局的基础知识

float 横向布局 float 实现横向布局&#xff0c;需要向横着布局的元素添加float 其值left right 存在问题 如果使用float 所在父级五高度&#xff0c;会导致下方的元素上移 top的高度被吞了 解决方法&#xff1a; 给父级元素设置高度&#xff1a;不推荐&#xff0c;需要给父级…

盘点15款主流客户管理系统,助力企业选型!

本文将盘点15款主流客户管理系统&#xff1a; 简道云、纷享销客、销售易、HubSpot、Zoho CRM、SAP CRM、Oracle CRM、金蝶云星空 CRM、用友 CRM、悟空 CRM、Salesforce、Microsoft Dynamics 365、亿客 CRM、八百客 CRM、CloudCC CRM。 在当今的商业环境中&#xff0c;客户管理系…

能大致讲一下Chat GPT的原理吗?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 话题群精选了三位网友的回答&#xff0c;从不同的角度阐释了Chat GPT的原理。 第一位网友的回答&#xff1a; 不给你扯长篇大论&#…

SpringBoot整合MyBatis使用自定义TypeHandler

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

系统知识小百科:如何禁用电脑无关软件!

禁用电脑上的无关软件是提升系统性能和安全性的有效手段。 以下是一些主要的方法来帮助你禁用这些软件&#xff1a; 一、通过Windows系统设置卸载无用软件 打开设置&#xff1a;按下Win I打开Windows设置。 进入应用管理&#xff1a;点击“应用”选项&#xff0c;这里会列出…

2024最新盘点!哪些仓库管理系统值得推荐?

本文将对16款仓库管理系统进行盘点&#xff1a; 简道云仓库管理系统、Oracle Warehouse Management、富勒、音飞储存、Microsoft Dynamics 365、金蝶、Logiwa、易订货、Fishbowl Warehouse、百卓轻云、智慧记、Oracle NetSuite、鸿链科技 WMS 仓库管理系统、Infor CloudSuite、…

武汉流星汇聚:亚马逊赋能中小企业,跨境电商市场举足轻重地位稳

在全球经济一体化的浪潮中&#xff0c;跨境电商作为推动国际贸易的重要力量&#xff0c;正以前所未有的速度发展。在这场全球性的商业竞赛中&#xff0c;亚马逊以其卓越的市场表现、强大的技术实力和深厚的品牌影响力&#xff0c;稳居跨境电商市场的领头羊地位&#xff0c;其举…

视频美颜SDK与直播美颜插件的开发指南:从基础到高级应用

今天&#xff0c;笔者将详细讲解如何从基础到高级应用开发视频美颜SDK与直播美颜插件。 一、视频美颜SDK的基础概念与架构设计 视频美颜SDK是一种集成在移动应用或桌面应用中的软件开发工具包&#xff0c;允许开发者在视频流中实现实时美颜效果。其核心功能包括肤色调整、磨皮…

Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手

前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数&#xff0c;这个函数用法和我们熟知的watch API一模一样。区别就是我们之前用的watch API是和Vue组件以及生命周期是一起实现的&#xff0c;他们是深度绑定的。而Vue3.5新增的base watch函数是一个新的函数&#xff0c…

飞速(FS)400G SR4光模块概述

随着光网络领域新技术的不断涌现&#xff0c;数据传输的能力和效率也在持续提升。400G SR4光模块的出现不仅扩展了短距离光通信的可能性&#xff0c;还为未来迈向800G及更高带标准宽奠定了基础。本文深入探讨了飞速&#xff08;FS&#xff09;400G SR4光模块的特点和重要性&…

《计算机操作系统》(第4版)第10章 多处理机操作系统 复习笔记

第10章 多处理机操作系统 一、多处理机系统的基本概念 1. 多处理机系统的引入 (1)CPU 时钟频率接近极限。 (2)增加系统吞吐量。 (3)节省投资。 (4)提高系统可靠性。 2.多处理机系统的类型 (1)紧密耦合MPS 和松散耦合MPS ①紧密耦合MPS 紧密耦合通常是通过高速总线或高速交叉开…

页面设计任务 商品详情页(带评论区)

目录 效果图&#xff1a; 任务描述 源码&#xff1a; 详细讲解&#xff1a; 1.产品信息部分 2.用户评论区域 效果图&#xff1a; 任务描述 页面结构: 页面应包括一个标题部分、一个产品展示区和一个客户评价区。使用图片展示产品&#xff0c;并添加描述。客户评价区展示一…

删除Vue2残留配置文件解决异常:Cannot find module ‘@vue/babel-plugin-transform-vue-jsx‘

背景 完成Vue2代码升级为Vue3后&#xff0c;将新代码上传至代码库。在修改源代码库代码后&#xff0c;启动项目&#xff0c;提示&#xff1a;Cannot find module ‘vue/babel-plugin-transform-vue-jsx‘&#xff0c;尝试安装该第三方库后仍然无效。 解决方案&#xff1a; 删…

浅谈【数据结构】图-图的存储

目录 1、图的存储 2、邻接表 3、十字链表 谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注 没错&#xff0c;说的就是你&#xff0c;不用再怀疑&#xff01;&#xff01;&#xff01; 希望我的文章内容能对你有帮助&#xff0c;一起努力吧&#xff01;&#xff01;…

知识竞赛中情境答题环节竞赛规则有哪些设计方案

情境题通常会给出一个具体的情景或场景&#xff0c;然后要求选手在该情境下回答问题、提出建议、解决问题等。目的是考察选手在特定情境下的分析和解决问题能力。一般由评委进行打分。 1.情境题可以是视频题&#xff0c;也可以是表演题&#xff0c;由选手抽一个题&#xff0c;…

东南亚媒体发布:5种东南亚地区媒体发稿技巧

东南亚国家是一个具有丰富多彩的文化的特点和媒体环境中的地域。想要在这个地区取得成功营销推广产品和服务&#xff0c;掌握如何有效与东南亚地区媒体协作尤为重要。下面我们就详细介绍五种在东南亚媒体发稿技巧&#xff0c;可以帮助读者高效地吸引住目标群体。 1.掌握市场定位…

机械学习—零基础学习日志(如何理解概率论8)

随机变量的协方差与相关系数 来一道练习题&#xff1a; 要先求出&#xff0c;a的数值&#xff1a; 要求联合分布律&#xff1a; 再求期望&#xff1a; 计算相关数值&#xff1a; 最后得到结果&#xff1a; 《概率论与数理统计期末不挂科|考研零基础入门4小时完整版&#xff08…

DaxPay:一套开源支付网关系统【送源码】

项目介绍 DaxPay是一套开源支付网关系统&#xff0c;已经对接支付宝、微信支付、云闪付相关的接口。可以独立部署&#xff0c;提供接口供业务系统进行调用&#xff0c;不对原有系统产生影响 特色功能 封装各类支付通道的接口为统一的接口&#xff0c;方便业务系统进行调用&am…