Xilinx_ROM_IP核的使用

Xilinx_ROM_IP核的使用

说明:coe文件的制作,ROM文件的读取。
环境:Vivado2018.3。
IP核:Block Memory Generator。
参考手册:
UG473: 7 Series FPGAs Memory Resources
PG058 :Block Memory Generator v8.4。
需要软件:
Guagle_wave
UltraEdit


1.coe文件的制作(可制作指定波形)

1.打开Guagle_wave软件
在这里插入图片描述
2. 菜单栏–>查看–>全局参数设定
可以设置数据长度和数据位宽。
在这里插入图片描述
3.设置波形或者手绘波形
在这里插入图片描述
4.保存为.mif文件(点击保存,别点击另存为,可能会导致空文件)
在这里插入图片描述
5.改后缀为.coe
在这里插入图片描述
6.用UltraEdit打开文件做以下更改
只保留红框数据,数据后面分号改为逗号,最后一个数据后为逗号,并在最前面添加

memory_iniTIalizaTIon_radix=16; //该处16代表进制

memory_iniTIalizaTIon_vector=

在这里插入图片描述

在这里插入图片描述
7.最后一步
由于coe格式文件最初为unix系统,在windows系统中需要转化以下格式
在这里插入图片描述
coe文件制作完成,这样有利于生成指定的波形,如果ROM只用需要生成指定的值,手动输入也可以。

2.ROM IP核配置及应用

  只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。
IP核深度与宽度配置:
在这里插入图片描述
ROM端口:
在这里插入图片描述
ROM读代码:

module top
(
	input	clk_25m

);
/********************************************************
*	时钟
*********************************************************/
wire		clk_100m;
wire		clk_locked;
clk_wiz_0 clk
(
    .clk_out1(clk_100m),
    .locked(clk_locked),  

    .clk_in1(clk_25m)
);     
/********************************************************
*	复位
*********************************************************/	
wire		RSTn;
assign		RSTn = clk_locked;

/********************************************************
*	ROM
*********************************************************/		
wire		rom_ena;
wire[4:0]	rom_addra;
wire[15:0]	rom_douta;

reg			rom_ena_r;
reg[4:0]	rom_addra_r;

assign		rom_ena 	= rom_ena_r;
assign		rom_addra   = rom_addra_r;

reg[7:0]	rom_cnt;
//ROM深度为32、宽度为16
always@(posedge clk_25m or negedge RSTn)
begin
	if(!RSTn)
	begin
		rom_cnt		<= 8'd0;
		rom_ena_r 	<= 1'b0;
		rom_addra_r	<= 5'h00;
	end
	else
	begin
		rom_ena_r	<= 1'b1;
		rom_cnt		<= (rom_cnt==8'd31)?8'd0:rom_cnt+8'd1;
		rom_addra_r	<= rom_cnt;
	end
end
		
blk_mem_gen_0 rom (
  .clka(clk_25m),    // input wire clka
  .ena(rom_ena),      // input wire ena
  .addra(rom_addra),  // input wire [4 : 0] addra
  .douta(rom_douta)  // output wire [15 : 0] douta
);	
/********************************************************
*	ila
*********************************************************/		
ila_0 ila (
	.clk(clk_100m), // input wire clk


	.probe0(clk_25m), // input wire [0:0]  probe0  
	.probe1(rom_ena), // input wire [0:0]  probe1 
	.probe2(rom_addra), // input wire [4:0]  probe2 
	.probe3(rom_douta) // input wire [15:0]  probe3
);	
	
endmodule

波形:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40147893/article/details/115007362