【Verilog】实验九 存储器设计与IP调用
一、实验目的
1. 掌握单端口RAM和ROM原理和设计方法。
2. 掌握单端口RAM和ROM的IP生成和调用方法。
2. 掌握ModelSim和VIVADO工具软件。
3. 掌握基本的测试代码编写和FPGA开发板使用方法。
二、实验环境
1. 装有ModelSim和VIVADO的计算机。
2. Sword实验系统。
三、实验原理
片内存储器分为RAM和ROM两大类。RAM是随机存储器,存储单元的内容可按需随意取出或存入。这种存储器在断电后将丢失所有数据,因此一般用来存储一些短时间内使用的程序和数据。
ROM即只读存储器,是一种只能读出事先存储的数据的存储器,其特性是存入的数据无法改变。也就是说,这种存储器只能读不能写。由于ROM在断电之后数据不会丢失,所以通常用在不需经常变更的电子资料。
四、实验任务
1. 用Verilog HDL设计深度为32、位宽为8 bit的单端口RAM,在Modelsim上仿真测试。
2.用Verilog HDL设计深度为8、位宽为8 bit的ROM。在Modelsim上仿真测试。
top.v
`timescale 1ns / 1ps
module TOP_new(input wire clk_200MHz_p,
input wire clk_200MHz_n,
input wire[15:0]SW,
output wire led_clk,
output wire led_clrn,
output wire led_sout,
output wire LED_PEN
);
wire clk_100mhz;
clk_wiz_0 instance_name (
// Clock out ports
.clk_out1(clk_100mhz), // output clk_out1
// Status and control signals
.reset(1'b0), // input reset
.locked(), // output locked
// Clock in ports
.clk_in1_p(clk_200MHz_p), // input clk_in1_p
.clk_in1_n(clk_200MHz_n) // input clk_in1_n
);
wire[31:0]Div;
wire CK;
wire[7:0] out;
ram U1(Div[26],SW[15:11],SW[10],SW[9],SW[7:0],out[7:0]);
//module ram(clk,addm,cs_n,we_n,din,dout);
//SW[10]片选--0,SW[9]为1是读,为0是写,SW[7:0]是输入的数据,SW[15:11]是写入的地址
//dist_mem_gen_1 U3(SW[15:11],SW[7:0],Div[26],SW[9],out);
//rom U3(out[7:0],Div[26],SW[2:0],SW[3]);
clk_div U8(clk_100mhz,1'b0,SW[2],Div,CK);
wire[15:0]LED_DATA;
LED_P2S #(.DATA_BITS(16),.DATA_COUNT_BITS(4))
PLED (clk_100mhz,
1'b0,
Div[20],
LED_DATA,
led_clk,
led_clrn,
led_sout,
LED_PEN
);
assign LED_DATA = {out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7],1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,Div[26]};
endmodule
ram.v
module ram(clk,addm,cs_n,we_n,din,dout);
input clk;
input [4:0] addm;
input cs_n,we_n;
input [7:0] din;
output [7:0] dout;
reg [7:0] dout;
reg [7:0] ram[7:0];
always@(posedge clk)
begin
if(cs_n) dout<=8'bzzzz_zzzz;
else
if(we_n) dout<=ram[addm];
else ram[addm]<=din;
end
endmodule