【Verilog数字系统设计——编程实现512x8的ROM和RAM】

Verilog数字系统设计——编程实现512x8的ROM和RAM

题目

  1. 编程实现512x8的ROM和RAM。
  2. ROM、RAM至少应该包含的端口包括地址线、数据线、片选线、读写使能端,复位端和时钟端(其中部分信号线只适用于RAM)。
  3. ROM、RAM和总测试模块分别包含在不同的.v文件中。
  4. 要求完成程序编辑、编译、时序仿真;
  5. 实验提交Verilog设计文件(.v文件)、仿真波形截图文件打包,压缩包以自己的学号+姓名命名;
  6. 一人提交一份作业文档,邮件方式提交,提交格式参见cs2.swfu.edu.cn/~ypy下的“上交作业.doc”(注意实验次数)、

代码

module myram(data,addr,clk,reset,wr_en,cs);
	input clk,reset,wr_en,cs;
	input [8:0]addr;
	inout [7:0]data;
	reg [7:0] temp;
	reg [7:0] mymem [511:0];
	integer i;
always @(posedge clk or negedge reset)
begin
	if(!reset)
	begin
		for(i=0;i<512;i=i+1)
			mymem[i] <= 0;
	end
	else if((cs==1'b1) &&(wr_en==1'b1))
	begin
		mymem[addr] <= data;
	end
	else if((cs==1'b1) &&(wr_en==1'b0))
	begin
		temp<=mymem[addr];
	end
	else
		temp<=8'bzz;


end
assign data=wr_en?8'bzz:temp;

endmodule

module myram_test;
	reg reset_t,wr_en_t,cs_t,clk_t;
	wire [7:0]data_t;
	reg [7:0]temp_t;
	reg [8:0]addr_t;
	integer i;
	
myram myram(.data(data_t),.addr(addr_t),.clk(clk_t),.reset(reset_t),.wr_en(wr_en_t),.cs(cs_t));
initial
begin
	reset_t=1;
	wr_en_t=0;
	cs_t=0;
	clk_t=0;
	temp_t=0;
	#5
	reset_t=0;
	#5
	reset_t=1;
	#5
	cs_t=1;
	wr_en_t=1;
	
    	for (i = 0; i < 256; i = i + 1) 
   	 begin
	      @(posedge clk_t) 
       		 begin
		    addr_t = i;
		    temp_t =i;
		end
   	 end
	#50
        wr_en_t=0;
	addr_t=0;
       for (i = 0; i < 256; i = i + 1) 
       begin
	     @(posedge clk_t)
	      addr_t = i;
	
       end
end
always #5 clk_t=~clk_t;
assign data_t=wr_en_t?8'bzz:temp_t;


endmodule

在这里插入图片描述

module myrom(data,addr,clk,reset,wr_en,cs);
	input clk,reset,wr_en,cs;
	input [8:0]addr;
	output [7:0]data;
	reg [7:0] data;
	reg [7:0] mymem [511:0];
	integer i;
always @(posedge clk or negedge reset)
begin
	if(!reset)
	begin
		for(i=0;i<511;i=i+1)
			mymem[i] <= i;
	end
	else if((cs==1'b1) &&(wr_en==1'b0))
	begin
		data<=mymem[addr];
	end
	else
		data<=8'bzz;


end
//assign data=temp;

endmodule

module myrom_test;
	reg reset_t,wr_en_t,cs_t,clk_t;
	wire [7:0]data_t;
	
	reg [8:0]addr_t;
	integer i;
	
myrom myrom(.data(data_t),.addr(addr_t),.clk(clk_t),.reset(reset_t),.wr_en(wr_en_t),.cs(cs_t));
initial
begin
	reset_t=1;
	wr_en_t=0;
	cs_t=0;
	clk_t=0;
	
	#5
	reset_t=0;
	#5
	reset_t=1;
	cs_t=1;
        wr_en_t=0;
	addr_t=0;
       for (i = 0; i < 256; i = i + 1) 
       begin
	     @(posedge clk_t)
	      begin
	      addr_t = i;
	      end
       end
end
always #5 clk_t=~clk_t;



endmodule

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LPM_ROM和LPM_RAM设计 一 实验目的 掌握FPGA中LPM_ROM的设置: 1 作为只读寄存器ROM的工作特性和配置方法; 2 学习将程序代码或数据以MIF格式文件加载于LPM_ROM中; 掌握lpm_ram_dp的参数设置和使用方法: 1 掌握lpm_ram_dp作为随即存储器RAM的设置; 2 掌握lpm_ram_dp的工作特性和读写方法; 3 掌握lpm_ram_dp的仿真测试方法。 二 实验要求 1 LPM_ROM定制和测试 LPM_ROM的参数设置: LPM_ROM中数据的写入,即初始化文件的编写; LPM_ROM的实际应用,在GW48实验台上用N0.0电路模式测试。 2 LPM_RAM定制和测试 LPM_RAM的参数设置; LPM_RAM的实际应用,在GW48实验台上用N0.0电路模式测试。 三 实验原理 用户可编程硬件FPGA芯片设计,有许多可调用参数化库模块LPM(Library Parameterized Modules),课直接调用设置,利用嵌入式阵列块EAB(Embed Array Block)构成lpm_ROM,lpm_RAM等各种存储器结构。 Lpm_ROM有5组信号: 地执信号address[]; 数据信号q[]; 时钟信号inclock、outclock; 允许信号memenable. 其参数是可以设定的。由于ROM是只读寄存器,它的数据口试单向的输出端口,数据是在对FPGA现场配置时,通过配置文件一起写入存储单元的。 Lpm_ram_dq的输入/输出信号如下: 地址信号 address[]; RAM_dqo的存储单元地址; 数据输入信号DATA[] RAM_dqo的数据输入端; 数据输出信号Q[]; RAM_dqo的数据输出端; 时钟信号CLK; 读/写时钟脉冲信号; 读写信号W/R 读/写控制信号端 数据从总线端口DATA[]输入。丹输入数据和地址准备好以后,由于在inclock上的信号是地址锁存时钟,当信号上升沿到来时,地址被锁存,于是数据被写入存储单元。数据的读出控制是从A[]输入存储单元地址,在CLK信号上升沿到来时,该单元数据从Q[]输出。W/R为读/写控制端,低电平时进行读操作,高电平时进行写操作; 四 实验步骤

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值