Vivado ip 核之 ROM dist_mem_gen配置及调用

Distributed Memory Generator 是一个用 LUT、RAM来实现存储的ip核,可用作一个大型查找表。本文仅讨论其中的 ROM 的使用。

目录

ROM 的配置

ROM 的调用、代码及仿真结果


ROM 的配置

首先创建 coe 文件,(创建一个txt文件,改后缀为coe)coe 文件的格式如下,第一行的 10 代表十进制,第三行及往后为数据,换成自己需要的数据。

memory_initialization_radix = 10;
memory_initialization_vector =
1,
2,
3,
4,
5,
6,
7,
8

在 IP Catlog 中搜索  dist_mem_gen,双击开始配置

点ok,配置完毕。

ROM 的调用、代码及仿真结果

代码

定义端口并例化

module rom(
	input					clk,
	input					rst,
	output 		[15 : 0]	qspo
    );
	
	reg		[6 : 0]		addr;

    //读地址自增
	always @ ( posedge clk ) begin
		if ( rst )
			addr <= 7'd0;
		else
			addr <= addr + 1'b1;
	end
	

	dist_mem_gen_0 rom_inst (
	  .a 		(addr	),        // input wire [5 : 0] a
	  .clk 		(clk 	),    // input wire clk
	  .qspo 	(qspo 	)  // output wire [15 : 0] qspo
	);
endmodule

写testbench

module rom_tb(

    );

	reg 				clk;
	reg 				rst;
	wire 	[15 : 0] 	qspo;

	initial clk = 1;
	always#5 clk = ~clk;
	
	initial begin
		rst = 1;
		#11;
		rst = 0;
	
	end

	rom rom_tb_inst(
		.clk 	(clk 	),
		.rst 	(rst 	),
		.qspo 	(qspo 	)
	    );

endmodule

仿真结果

由于我创建的 coe 文件中仅有 8 个数据,因此当读地址为 9 的时候,没有数据读出。拉到后面看到读地址为 65 的时候又读出了 1 、2 、3 、……,因为设置的 ROM 深度为64,可能是 65 除以 64 的余数为 1 , 所以读了地址 1 处的数据。 

若是配置的第二页,output options 选择 Non Registered,则输出与地址 addr 同步,不会滞后一拍,input options 和 output options 都选择 Registered 输出则会滞后地址一拍,即地址 1 对应的数据直到下一个时钟上升沿才被输出。

output options 或 input options 选择 Non Registered 时的仿真情况
output options 和 input options 都选择 Registered 时的仿真情况
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值