提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
无论什么样的资源处理器RAM资源都是必不可少的只要我们在程序的运行过程中需要用到计算那么必然会产生数据,必须需要一个存储空间去存储我们计算的数据。RAM是一个非常重要的资源。
提示:以下是本篇文章正文内容,下面案例可供参考
一、RAM IP简介
1片RAM为36k ram的读核写是独立的,需要先定义读优先还是写优先。
二、RAM IP核的使用
1.RAM IP核的使用步骤
点击ok生成ip核打开.veo复制例化模版
2.读入数据
增加读写数据模块
向.v文件中添加如下代码
module RAMIP_rw(
input clk,
input rst_n,
output reg ram_En, //读写使能
output reg rw, //读写选择
output reg[4:0] ram_addr, //2的5次方=32
output reg[7:0] ram_wr_data
);
reg[5:0] rw_cnt;
//使能
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
ram_En <= 1'b0;
else
ram_En <= 1'b1;
end
//读写控制计数器
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
rw_cnt <= 6'b0;
else if (rw_cnt == 6'd63)
rw_cnt <= 6'b0;
else
rw_cnt <= rw_cnt+6'b1;
end
//写入数据
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
ram_wr_data <= 8'b0000_0000;
else if((rw_cnt <= 6'd31)&&ram_En)
ram_wr_data <= 8'd1 + ram_wr_data;
else
ram_wr_data <= ram_wr_data;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
rw <=1'b1;
else if(rw_cnt <= 6'd31)
rw <=1'b1; //写状态
else
rw <= 1'b0;
end
//读写地址设置
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
ram_addr <= 5'd0;
else
ram_addr <= rw_cnt[4:0]; //0-31的地址位
end
endmodule
再将该模块例化进入顶层文件
wire [7:0] dout;
wire ram_En;
wire rw;
wire [4:0] ram_addr;
wire [7:0] ram_wr_data;
RAMIP_rw u_RAMIP_rw(
.clk (sysclk) ,
.rst_n (sys_rst_n) ,
.ram_En (ram_En) , //读写使能
.rw (rw) , //读写选择
.ram_addr (ram_addr) , //2的5次方=32
.ram_wr_data(ram_wr_data)
);
进行综合
3.使用ILA检测读取数据是否正确
添加ILA IP
将其例化到顶层文件,以及将之前RAM的ip也例化到顶层文件
生成比特流下载程序
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。