FPGA-RAM核的使用及调试

百度百科:RAM

随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。

存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储单元的工作原理,随机存储器又分为静态随机存储器(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。

这里直接调用ip核进行测试

选择单口的ram进行写数据操作,并通过波形分析chipscope进行数据的核对

因为这里我截图不方便就不贴RAM核的生成过程了后面转一篇至芯科技的ram核的生成贴供大家参考

话不多说直接贴代码:

top.v:

module top(ext_clk_25m,ext_rst_n,ram_rddb
    );
	input ext_clk_25m;
	input ext_rst_n;
	output[7:0] ram_rddb;

	ram_controller uut_ram_controller(
	.clk(ext_clk_25m),
	.rst_n(ext_rst_n),
	.ram_rddb(ram_rddb)
    );
endmodule

ram_controller.v:

module ram_controller(clk,rst_n,ram_rddb
    );
	input clk;
	input rst_n;
	output [7:0] ram_rddb;
	
	reg [4:0]ram_addr;//RAM地址
	reg [7:0]ram_wrdb;//RAM写入数据
	reg ram_wren;//写入使能
	reg[9:0] cnt;
	always@(posedge clk or negedge rst_n)begin
		if(rst_n==1'b0)begin
			cnt<=1'b0;
		end
		else begin
			cnt<=cnt+1'b1;
		end
	end
	always@(posedge clk or negedge rst_n)begin
		if(rst_n==1'b0)begin
			ram_wren<=1'b0;
			ram_wrdb<=1'b0;
			ram_addr<=1'b0;
		end
		else if((cnt>10'd0)&&(cnt<10'd33))begin
			ram_wren<=1'b1;
			ram_wrdb<=ram_wrdb+1'b1;
			ram_addr<=ram_addr+1'b1;
		end
		else if((cnt>10'd0)&&(cnt<10'd33))begin
			ram_wren<=1'b1;
			ram_wrdb<=1'd0;
			ram_addr<=ram_addr+1'b1;
		end
		else begin
			ram_wren<=1'b0;
			ram_wrdb<=1'b0;
			ram_addr<=1'b0;
		end
	end
	my_ram your_instance_name (
	  .clka(clk), // input clka
	  .wea(ram_wren), // input [0 : 0] wea
	  .addra(ram_addr), // input [4 : 0] addra
	  .dina(ram_wrdb), // input [7 : 0] dina
	  .douta(ram_rddb) // output [7 : 0] douta
	);

endmodule

如果使用波形分析仪的话需要新建cdc文件

配置文件的方法我博文中有讲到

写博文的时候不小心把波形分析仪关闭了就不跟截图了over

你可能感兴趣的:(FPGA专栏)