(7)ram ip使用

news/2024/5/20 6:11:57

一、ram相关介绍

 本实验使用一个控制模块对ram ip进行控制(本质上是三个计数器)

二、ip使用

在界面中选择IP catalog,搜索block,选择底下这个,双击即可生成ram的ip

下面进行一些ram资源的配置

 配置好后点击ok,生成ip,可以在这里看到已经生成好了:

 

 这里点开这个.veo文件,里面的东西可以当做模版使用

在实验中,我们也使用了ila的ip,就相当于探针一样观察信号的变化,本实验使用的如下(在IP catalog中搜索ila)

 在控制模块(即ram_rw中例化ila即可)

 

仿真部分:

为时钟和复位(Y18和F15)配置引脚后,生成比特流下载到板子上,ila会自动跳出来,观察到ram读写数据正确(wea高为写,低为读)

 


注意:

由于所使用的板子的复位信号常高,因此这里需要取反

 


 

附:工程

ip_ram.v

`timescale 1ns / 1ps
module ip_ram(input sys_clk,input sys_rst_n);wire ram_en             ;
wire ram_wea            ;
wire [4 : 0]ram_addr    ;
wire [7 : 0]ram_wr_data ;
wire [7 : 0]ram_rd_data ;ram_rw ram_rw(.clk         (sys_clk),        .rst         (sys_rst_n),        .ram_en      (ram_en),     .ram_wea     (ram_wea),    .ram_addr    (ram_addr),   .ram_wr_data (ram_wr_data),.ram_rd_data (ram_rd_data)
);blk_mem_gen_0 u_blk_mem_gen_0 (.clka(sys_clk),            // input wire clka.rsta(!sys_rst_n),            // input wire rsta.ena(ram_en),              // input wire ena.wea(ram_wea),              // input wire [0 : 0] wea.addra(ram_addr),          // input wire [4 : 0] addra.dina(ram_wr_data),            // input wire [7 : 0] dina.douta(ram_rd_data),          // output wire [7 : 0] douta.rsta_busy()  // output wire rsta_busy
);
endmodule

 

ram_rw.v

`timescale 1ns / 1psmodule ram_rw(input               clk,input               rst,output              ram_en,output              ram_wea,output  reg [4 : 0] ram_addr,output  reg [7 : 0] ram_wr_data,input       [7 : 0] ram_rd_data       //从ram读取出来的数据
    );reg [5:0] cnt1;//读写转换
assign ram_wea = (cnt1 <= 31)?1:0;
assign ram_en = rst;//读写转换计数
always @(posedge clk or negedge rst) beginif(!rst)cnt1 <= 0;elsebeginif(cnt1 == 6'd63)cnt1 <= 0;elsecnt1 <= cnt1 + 1;endend//生成数据
always @(posedge clk or negedge rst) beginif(!rst)ram_addr<= 0;else if (ram_addr <= 6'd31)ram_addr <= ram_addr + 1;elseram_addr <= 0;end//生成地址
always @(posedge clk or negedge rst) beginif(!rst)ram_wr_data <= 0;else if (ram_wr_data <= 6'd31)ram_wr_data <= ram_wr_data + 1;elseram_wr_data <= 0;endila_0 your_instance_name (.clk(clk), // input wire clk
.probe0(ram_en), // input wire [0:0]  probe0  .probe1(ram_wea), // input wire [0:0]  probe1 .probe2(ram_addr), // input wire [4:0]  probe2 .probe3(ram_wr_data), // input wire [7:0]  probe3 .probe4(ram_rd_data) // input wire [7:0]  probe4
);endmodule

在这份工程最底下就是例化的ila

 


 

视频来源:

28_实战篇:RAM IP核(第二讲:程序设计)_哔哩哔哩_bilibili 

 

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

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

相关文章

一文搞懂 ARM 64 系列: ADC

一文搞懂 ARM 64 系列: ADC1 指令语法 adc <Xd>, <Xn>, <Xm>2 指令语义 adc就是带「进位」加法,指令中的c就是英文carry。 整个指令等价于: (Xd, _) = Xn + Xm + PSTATE.C也就是将寄存器Xn,寄存器Xm,PSTATE中的「进位」标志相加,将相加的结果写入寄存器X…

Linux Shell 脚本专题

本文介绍了Linux Shell环境变量和脚本使用的常用知识点。V1.0 2024年5月8日 发布于博客园目录常用环境变量一、环境变量的概念1、环境变量的含义2、环境变量的分类3、Linux环境变量二、常用的环境变量1、查看环境变量2、常用的环境变量三、设置环境量1、系统环境变量2、用户环境…

OpenDiary 24.5

我去!五月了我去!五月了 一亿年没更日寄了pixiv 100277433四月后日谈 鉴于整个四月基本没记日记,有必要开展一次考古活动 因为考古是比较困难的事情,所以想到什么就写什么了打了一整月的 p5r,四月下旬全都在高强度 p5r,每天都情不自禁打很长很长时间 一个月打了 93h 之多…

第八章——软件工程基础知识

软件工程概述,软件开发模型,软件开发方法,需求分析,系统设计,系统测试,软件开发项目管理,软件质量,软件度量第八章——软件工程基础知识 软件工程概述 软件开发模型 软件开发方法 需求分析 系统设计 系统测试 软件开发项目管理 软件质量 软件度量

Linux 中如何设置每个特定的时间执行特定的程序

那会突然想到一个问题,如何每隔一段时间执行特定的程序。想到了如下的一种方法: 测试如下: 一个小问题,比如 每隔5秒统计一个特定文件的行数 001、[b20223040323@admin1 test]$ ls false.gff pan.fna pan.fna.fai record.sh true.gff variable.gff x_variable_protei…

TextMeshPro - 艺术字(图片字)

1、首先要有一张包含了图片字的图集,每个图片字一个Spirte 2、然后右键 -> 创建创建好的TMP_Sprite Asset 3、编辑Sprite Character Table 调整顺序,将index和图片数字对上 修改下Unicode值(默认都是0xFFFE),比如9的Unicode为0x0039。(注意:填写完后,按Enter没用,…

注册表延长Windows更新时间

打开注册表【Win】+【R】打开运行窗口输入regedit在输入框中输入计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings后回车在右侧空白处选择新建->DWORD(32位)值(D)命名为FlightSettingsMaxPauseDays,选中10进制数据数值为暂停更新的天数。 确定后关…

Face Detection API

一个针对图像中的人脸进行识别的底层加速平台组件<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0…