Vivado ROM IP核

ROM IP核调用实验
1. ROM IP核简介
ROM是只读存储器(read only memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦存储资料就无法再将其改变或删除,且资料不会因为电源关闭而消失。

2. ROM IP核的配置
首先点开vivado创建新的工程,点击左侧的IP catalog 搜索block双击打开,basic选项卡的配置如下:

配置成单端口的ROM
在这里插入图片描述

在第二个选项卡中配置端口,设置端口为位宽8、深度256,设置为读优先,时钟使能,其余默认。
在这里插入图片描述

第三个选项卡other options,设置加载初始化文件(.coe),因为ROM是只读存储器,是不能在里面写入数据的,所以在初始化的时候将数据放置进去,再通过读操作读取出来,在源文件中添加自己写的初始化数据,(这个文件可以通过python或者matlab生成,这里由于数据量比较少,所以就手动输入)这里设置为数据的进制(radix)为10,填入的数据为从0到63共64个数据,之前设置的深度为256,所以是足够容纳的,将这个文件放置在对应的IP SRC文件中,在配置IP的界面中将此文件浏览进去即可。

在这里插入图片描述
初始化代码:

memory_initialization_radix = 10;
memory_initialization_vector = 
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63;

其余设置保持默认即可,点击OK即可。
3. ROM IP核的调用
点击+号,添加设计文件,代码如下:

解释:可以在IP Sources中找到veo文件,可以复制ROM IP例化模板,点击复制到刚刚建立的设计文件,可以发现有三个端口需要声明,分别为输入的时钟和地址,以及输出的数据,并定义好地址和数据的位宽为8。

在这里插入图片描述

module rom(
	input	wire				sys_clk,
	input 	wire 	[7 : 0] 	addra,
	output 	wire 	[7 : 0] 	douta
 );
 
//例化单端rom
rom_8_256 rom_inst (
  .clka(sys_clk),    // input wire clka
  .addra(addra),  // input wire [7 : 0] addra
  .douta(douta)  // output wire [7 : 0] douta
);
endmodule
  1. 仿真文件的设计
    接下来进行最后一步:写仿真文件,点击+号添加仿真文件,将刚刚的设计文件中的端口进行例化,并写上测试的方式,仿真文件的代码如下,保存即可看见IP已经在仿真的层级中。
`timescale 1ns / 1ps
//
// Create Date: 2022/01/31 11:49:47
// Designer Name: linest
// Module Name: tb_rom
// Revision 0.01 - File Created
// 
//
 
 
module tb_rom( );
 
	reg					sys_clk;
	reg					sys_rst_n;
	reg 	[7 : 0] 	addra;
	wire	[7 : 0]		douta;
//init sys_clk
initial 
	begin
		sys_clk = 1'b1;
		sys_rst_n <= 1'b0;
		#20
		sys_rst_n <= 1'b1;
	end
//change sys_clk
always #10 sys_clk = ~sys_clk;
 
always @(posedge sys_clk or negedge sys_rst_n) begin
	if (sys_rst_n == 1'b0) begin
		addra <= 8'b0;
	end
	else if (addra == 8'd255) begin
		addra <= 8'b0;
	end
	else begin
		addra <= addra + 1'b1;
	end
end
//例化
rom tb_rom(
	.addra(addra),
	.douta(douta),
	.sys_clk(sys_clk)
);
endmodule

在这里插入图片描述
5. 进行仿真
点击左侧菜单栏中的simulation即可看到仿真结果与设计的想法一致,可以看到输出是相对于地址延时两拍的,这是因为在之前配置IP核的时候添加了输出寄存器(primitive output register),导致延时多了一拍,如果将这个输出寄存器去掉,则输出的数据就会只延时一拍。
在这里插入图片描述
在这里插入图片描述
本实验基于zedboard、vivado 2018.2实现。

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_44985628

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值