单端口rom

项目名称

单端口rom

具体要求

将0-1023存入rom,并读出

设计架构

地址从0-1023需要10位,数据同样如此

单端口rom_第1张图片

代码设计

verrilog代码设计

1.创建mif文件,数据最大为1024,数据位宽10位,存储深度为1024

                                                      单端口rom_第2张图片

                                               单端口rom_第3张图片

                                                                          单端口rom_第4张图片

2.创建rom ip核

单端口rom_第5张图片单端口rom_第6张图片

顶层模块设计

module rom_top(
	input				clk,
	input				rst_n,
	output [9:0]	q
);

wire [9:0]addr;
rom_ctrl rom_ctrl(
	.clk(clk),
	.rst_n(rst_n),
	.addr(addr)
);

 my_rom  my_rom(
	.address(addr),
	.clock(clk),
	.q(q)
);
endmodule

rom_ctrl模块设计

module rom_ctrl(
	input			clk,
	input			rst_n,
	output reg[9:0]addr
);
always@(posedge clk or negedge rst_n)
	if(!rst_n)
		addr<=10'd0;
	else if(addr<10'd1023)
		addr<=addr+1'd1;
	else
		addr<=10'd0;
endmodule

仿真代码

`timescale 1ns/1ns
module rom_top_tb;
	reg			clk;
	reg			rst_n;
	wire [9:0]	q;

	rom_top rom_top(
	.clk(clk),
	.rst_n(rst_n),
	.q(q)
);

initial clk=0;
always #10 clk=~clk;

initial begin
	rst_n=0;
	#100
	rst_n=1;
	#20700
	$stop;
end

endmodule

仿真结果

单端口rom_第7张图片

数据延迟地址一拍读出

你可能感兴趣的:(fpga实战小项目)