FPGA--RAM

发布时间:2026/10/19 4:10:09

FPGA--RAM 一、基本介绍这一部分我在csdn找到了一篇计算机组成的文章大家可以通过这个通俗易懂的文章进行学习计算机组成与体系结构RAM随机存取存储器RAM单端口只有一个端口读写不能同时进行共用数据通道将单端口的写功能关闭只用读端口可以当作room使用具体后续文章会补充伪双端口SDP有两个端口一个用来读一个用来写分工明确真双端口有两个端口各自都能读或者写二、实验部分ip核配置1基本介绍我们实验部分主要是用一个ram0-31存数据然后32-63将数据读出2ip核配置1创建好.v文件点击IP catlog搜索ram选择block memory generator对于第一个interface type可以选native或者AXI4我们选native普通版就行对于第二个memory type我们可以选的类型就比较多了从上到下依次是单端口伪双端口真双端口单端ROM双端ROM其中ROM就是把我们的RAM的写功能禁止了只能用来读数据第三个ECC Options这实现的是纠错功能但是对于我们的单端口是无法选中这个功能的只有伪双端口才有这个纠错功能第四个write enable写使能勾选之后按照一字节一字节进行写数据数据只能是8位或者9位的整数倍第五个algorithm options这一部分选择有三个从上到下依次是最小面积最低功耗固定原语primitive是他的默认容量我这边是8kx23ip核配置2首先memory width配置我们需要配置写位宽读位宽写的数据量读的数据量operating mode里面用来选择我们是写优先/读优先enable port type使能功能可选always enable一直使能或者use ENA pin给一个信号来控制使能port A optional output register输出寄存器如果勾选之后RAM的输出数据会在这个寄存器里面缓冲然后释放数据使得数据有延迟但是这不意味着我们就一定不用勾选他勾选不勾选都有各自的利弊不勾选造成时序的不严谨造成错误的数据port A output reset options复位接下来简单介绍一下现在的各个引脚从上到下依次是地址位时钟数据输入数据输出使能读写切换4ip核配置3这一部分我们用作RAM的直接默认即可如果后续我们采用这个ip核配置ROM的话我们需要在这里加载一个coe文件三、IP核例化使用1、例化ip核首先找到我们的例化模板注意是veo文件2、编写读写模块我们需要一个读写模块来驱动这个ram的ip核新建一个v文件命名为ram_rw这部分的数据和地址都是由计数器提供的module ram_rw( input clk, input rst_n, //ram ip核需要一个使能信号定义成reg型后续用always进行赋值 output reg ram_en, //ram ip核需要读写切换定义成reg型 output reg rw, //ram ip核需要地址信号5位二进制数则是2^532位定义成reg型 output reg [4:0] ram_addr, //ran ip核写数据数据位宽8位 output reg [7:0] ram_wr_data, ); endmodule //定义一个计数器判断什么时候该读数据什么时候写数据由于我们题目说0-31写数据32-63读数据64个数字需要6位数据位宽 reg [5:0] rw_cnt; //ram ip核使能部分 always(posedge clk or negedge rst_n)begin if(!rst_n) ram_en1b0; else ram_en1b1; end //1、读写计数器逻辑 always(posedge clk or negedge rst_n)begin if(!rst_n) rw_cnt6d0; else if(rw_cnt6d63) rw_cnt6d0; else rw_cntrw_cnt6d1; end //2、读写切换逻辑 always(posedge clk or negedge rst_n)begin if(!rst_n) rw1b1;//默认写状态 else if(rw_cnt6d31) rw1b1;//写状态,由于读写数据处理考虑使能这里可以不用考虑直接切换读写状态 else rw1b0;//读状态 end //3、读写数据处理 always(posedge clk or negedge rst_n)begin if(!rst_n) ram_wr_data8d0; //写数据逻辑,注意需要使能 else if((rw_cnt6d31)ram_en) ram_wr_dataram_wr_data8d1;//由于题目中数据也是0-31所以直接类似计数器即可 else ram_wr_dataram_wr_data;//如果未使能/不在写数据阶段就保存数据 end //4、读写地址处理 always(posedge clk or negedge rst_n)begin if(!rst_n) ram_addr5d0; else ram_addrrw_cnt[4:0];//地址同样由计数器决定为了不超位数只取计数器的低5位 end四、编写代码1、添加读写模块进入主文件将ram和读写模块例化timescale 1ns / 1ps module ip_ram( input sys_clk, input sys_rst_n ); wire ram_en; wire rw; wire [4:0] ram_addr; wire [7:0] ram_wr_data; wire [7:0] douta; ram_rw ram_rw_inst( .clk(sys_clk), .rst_n(sys_rst_n), .ram_en(ram_en), .rw(rw), .ram_addr(ram_addr), .ram_wr_data(ram_wr_data) ); blk_mem_gen_0 ram_inst ( .clka(sys_clk), // input wire clka .ena(ram_en), // input wire ena .wea(rw), // input wire [0 : 0] wea .addra(ram_addr), // input wire [4 : 0] addra .dina(ram_wr_data), // input wire [7 : 0] dina .douta(douta) // output wire [7 : 0] douta ); endmodule2、对引脚进行配置点击右上方的I/O planing注意检查一下约束文件对于时钟是否已经配置好50mhz了我是经常配置出问题# 时钟物理约束 set_property PACKAGE_PIN N18 [get_ports sys_clk] set_property IOSTANDARD LVCMOS33 [get_ports sys_clk] # 复位物理约束 set_property PACKAGE_PIN D19 [get_ports sys_rst_n] set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n] # 关键时钟时序约束50MHz - 20ns 周期 create_clock -period 20.000 -name sys_clk [get_ports sys_clk]3、添加ila信号在顶层模块连接好timescale 1ns / 1ps module ip_ram( input sys_clk, input sys_rst_n ); wire ram_en; wire rw; wire [4:0] ram_addr; wire [7:0] ram_wr_data; wire [7:0] douta; ram_rw ram_rw_inst( .clk(sys_clk), .rst_n(sys_rst_n), .ram_en(ram_en), .rw(rw), .ram_addr(ram_addr), .ram_wr_data(ram_wr_data) ); blk_mem_gen_0 ram_inst ( .clka(sys_clk), // input wire clka .ena(ram_en), // input wire ena .wea(rw), // input wire [0 : 0] wea .addra(ram_addr), // input wire [4 : 0] addra .dina(ram_wr_data), // input wire [7 : 0] dina .douta(douta) // output wire [7 : 0] douta ); ila_0 your_instance_name ( .clk(sys_clk), // input wire clk .probe0(ram_en), // input wire [0:0] probe0 .probe1(rw), // input wire [0:0] probe1 .probe2(ram_addr), // input wire [4:0] probe2 .probe3(ram_wr_data), // input wire [7:0] probe3 .probe4(douta) // input wire [7:0] probe4 ); endmodule
延伸阅读

更多相关文章

2026/10/19 4:10:09

从零手写MCP Client:彻底搞懂模型上下文协议核心链路

1. 先弄明白MCP到底在解决什么问题很多朋友第一次看到 MCP(Model Context Protocol,模型上下文协议)这个名字,第一反应是“又出了一个新框架”。我一开始也这么想,直到有一天需要把一个内部的数据查询服务接到 AI 模型…

2026/10/19 4:10:09

Vue 3 深入学习笔记 08:插槽(Slots)与组件的内容扩展设计

Vue 3 深入学习笔记 08:插槽(Slots)与组件的内容扩展设计 一、为什么需要学习插槽? 在前面第 06 篇中,我们学习了组件设计与职责边界;第 07 篇学习了 v-model 与受控组件设计。 现在我们继续思考一个真实的…

2026/10/19 4:10:09

Solidity语言的区块链:从0到1编写、测试与部署以太坊智能合约

引言 区块链技术自比特币白皮书发布以来,已经彻底改变了我们对价值转移、数据存储和信任机制的理解。在众多开发区块链的技术栈中,Solidity 是智能合约开发领域当之无愧的霸主。它是一种面向对象的高级编程语言,专为在以太坊虚拟机(EVM)上编写智能合约而设计,受C++、Pyt…

2026/10/19 5:25:16

C++享元模式实战:从原理到线程安全实现与内存优化

1. 内存告警背后的元凶:上千种弹道特效的重复建模先说个我遇到过的真实场景。某客户端的战斗模块里有一批弹道特效,每个子弹发射后都会在场景里生成一条轨迹,轨迹上挂着一串光点数据。最初功能跑得好好的,但等特效种类从十几个涨到…

2026/10/19 5:25:16

YOLOv8电梯电瓶车检测系统:开箱即用的毕设落地方案

简介:本资源是一套基于YOLOv8的电梯场景电瓶车闯入智能识别与报警系统,面向计算机、人工智能、自动化等专业在校学生及初学者,解决公共场所安全监管中电瓶车违规进电梯这一典型视觉检测问题,适用于毕业设计、课程设计、大作业或项…

2026/10/19 5:25:16

YOLOv8电梯电瓶车实时检测系统:3分钟启动报警GUI

简介:本资源是一套基于YOLOv8的电梯场景电瓶车闯入智能识别与报警系统,面向计算机、人工智能、自动化等专业在校学生及初学者,解决公共场所安全监管中对违规载电动车入梯行为的实时检测与预警需求,特别适合作为毕业设计、课程设计…

2026/10/19 5:25:16

AI工作流优化实战:让智能体不止于单点提效

这两年我帮好几个团队做过AI落地,发现一个特别普遍的现象:大家一提到AI提效,第一反应就是“上一个智能体”。买工具、调接口、套模板,把某个环节换成AI,然后期待奇迹发生。结果呢?局部确实快了,…

2026/10/19 5:20:16

矩阵分解推荐系统实战:从协同过滤到SGD梯度下降原理与实现

如果把推荐系统相关的经典论文排个"被引用最多、被误读也最多"的榜单,这篇《Matrix Factorization Techniques for Recommender Systems》绝对能进前三。我第一次读它的时候刚被各种协同过滤公式折磨完,看完第一反应是:就这么简单&…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑