FPGA 内部双口块RAM 读写实现
由XILINX官网文档PG058 “LogiCORE IP Block Memory Generator v8.2”
FPGA 内部块RAM 的读时序如下图:
可知,块RAM的读延时为两个时钟周期。
FPGA 内部块RAM 的写时序如下图:
可知,块RAM 的写延时为0,但是RAM 中的内容是在写的下一个时钟改变。
在ISE下实现对FPGA内部块RAM 的读写代码:
module TOP(
input USER_CLK
);
`define DLY #1
reg FPGA_Enable=0;
reg[3:0] FPGA_Write_Enable=4'h0;
reg[31:0] FPGA_Address=0;
reg[31:0] FPGA_Write_Data=0;
reg[31:0] FPGA_Read_Data_reg=0;
wire[31:0] FPGA_Read_Data;
reg[10:0] count=0;
always @ (posedge USER_CLK)
begin
count <= count + 1;
if(count<=100)
begin
FPGA_Enable <= 0;
FPGA_Write_Enable <= 4'h0;
end
else if((count <= 105)&&(count >100))
begin
FPGA_Enable <= 1;
FPGA_Write_Enable <= 4'hf;
FPGA_Address <= FPGA_Address + 4;
FPGA_Write_Data <= FPGA_Write_Data + 1;
end
else if((count <= 110)&&(count >105))
begin
FPGA_Enable <= 0;
FPGA_Write_Enable <= 4'h0;
FPGA_Address <= 0;
FPGA_Write_Data <= 0;
end
else if((count <= 117)&&(count >110))
begin
FPGA_Enable <= 1;
FPGA_Write_Enable <= 4'h0;
FPGA_Read_Data_reg <= FPGA_Read_Data;
FPGA_Address <= FPGA_Address + 4;
end
else if(count == 118)
begin
FPGA_Enable <= 0;
count <= count;
end
end
BBBB your_instance_name (
.clka(USER_CLK), // input clka
.ena(FPGA_Enable), // input ena
.wea(FPGA_Write_Enable), // input [3 : 0] wea
.addra(FPGA_Address), // input [31 : 0] addra
.dina(FPGA_Write_Data), // input [31 : 0] dina
.douta(FPGA_Read_Data), // output [31 : 0] douta
.clkb(clkb), // input clkb
.enb(enb), // input enb
.web(web), // input [3 : 0] web
.addrb(addrb), // input [31 : 0] addrb
.dinb(dinb), // input [31 : 0] dinb
.doutb(doutb) // output [31 : 0] doutb
);
endmodule
效果图:
从上图可以看出,在地址4~20里面写入了1-5的数,数据读出的时候对应地址的数据都延时了两个时钟周期才输出。
FPGA 内部双口块RAM 读写实现相关推荐
- linux mpc8313启动流程,基于MPC8313E和FPGA的双口RAM驱动开发
摘要 以MPC8313E芯片为平台,介绍了一个基于嵌入式Linux探作系统的双口RAM设备驱动.通过该设备驱动搭建Linux服务器,利用缓存技术实时读取FPGA双口RAM数据,最终实现将海量图像数据高 ...
- 【verilog】 Vivado-Simple Dual-Port RAM IP的使用(Xilinx FPGA,双口RAM,IP使用)
简单双口RAM的IP核 配置IP 例化顶层 测试 波形 简单双口RAM的IP核 分A端口和B端口 A为输入端口,负责数据的写入 B端口为输出端口,负责数据的读出 两端的时钟可以不同,还允许在写入A的同 ...
- 最详细的FPGA的双口RAM乒乓操作与数据处理实例(第一部分)
首先说明一下 代码都是自己完全手写的,如果有人看了我的代码,欢迎指出不足,写的不好也不要嘲笑,一个字一个字写出来的. - 1.目的 测试双口RAM的乒乓操作的功能,研究RAM输入输出操作,以及乒乓操作 ...
- 特殊资源:DSP48E1和块RAM
除了通用的部分,还有两个特殊用途的部件:满足密集存储需要的块RAM和用于高速算术的DSP48E1片.这两个资源都按列排列几成在逻辑阵列中,嵌入在逻辑部分中,而且往往彼此靠近(因为密集计算和在内存中存储 ...
- FPGA入门嵌入式 块RAM双口RAM使用
嵌入式 块RAM双口RAM使用 对RAM(随机存储器)进行读和写操作. 使用tool工具生成IP核RAM,8位读地址8位写地址. IP核仿真 `timescale 1ns/1ns `define cl ...
- FPGA双口RAM使用
模块名称: dpram() IP Core 双口RAM,有俩组数据线和地址线,读写可以同时进行,FIFO读写可以同时进行,可以看作是双口.分为Simple two-dual RAM和true two- ...
- FPGA设计心得(1)真双口RAM使用及其仿真问题记录
文章目录 前言 设计介绍 关于仿真 老生常谈 最后想说的话 前言 RAM是一个好东西,FIFO也是,关键是适应你的设计场景,本文是一个记录性质的博文,所以也没必要什么都交代清楚了,只是在项目开发中,有 ...
- 通过vivado工具实现zynq的FPGA内部RAM读写
通过vivado工具实现zynq的FPGA内部RAM读写(调用vivado自带IP核),从新建工程到仿真并下载到FPGA开发板中,通过vivado自带的ILA逻辑分析仪查看读写数据是否正确,包含详细步 ...
- Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...
linux环境下读写一次双口ram尽然要十几个毫秒.(附驱动代码) 我用的双口ram是IDT70V28,手册上说的读写时间应该是几个纳秒,我写了个linux驱动,然后做测试,发现读写一次的时间尽然是十 ...
最新文章
- 星型模型 3nf的区别_贵州省遵义市工业模型经典案例展示
- matlab数据接口技术,实战MATLAB之文件与数据接口技术
- zookeeker如何解决HBase单节点故障
- 和可被 K 整除的子数组
- 学习《css世界》笔记之多行文本实现垂直居中
- 群晖 root_最新群晖DSM7.0降级教程
- 不可思议的素数(上)(文末送书)
- QML文档阅读笔记-easing.type解析与实例
- 微赞企动协会wac_xiehui3.0.9全开源版模块
- mybatis-plus乐观锁
- layui select监听选中的值 二级联动
- 《小团团团队》第四次作业:项目需求调研与分析
- 用css控制背景图片的位置,大小
- Java学习——Java基本的程序设计结构笔记(一)
- php结合nginx,mysql
- Cocos2d-x3.0-倾斜列表
- 【matlab】设置中文版帮助
- 最简单的java代码【java基本语法】
- ArcGIS代码进行重分类
- xLua(一)——介绍
热门文章
- 从数学中的虚幻模式到傅里叶变换性质
- QN8027输出调频分裂的频谱
- 塞尔达amiibo_塞尔达荒野之息pC版(附带全Amiibo)安装教程,最无敌的游戏
- java big o_java – 计算Big-O复杂性
- 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
- springboot整合postgresql_SpringBoot+JPA+PostgreSQL整合问题
- drools规则中调用其它规则_简化机器学习中的关联规则
- 如何用python写程序设置当前打印机为默认打印机_从Python打印到标准打印机?
- java中table是什么标签_[Java教程]javascript格式化table标签内容
- java进程与线程_Java多线程笔记(零):进程、线程与通用概念