SDRAM单字节读写硬件测试

硬件测试示意图 

下面是顶层代码,顶层主要在单字节仿真测试里加入uart串口和八段数码管来测试SDRAM读写状态 

module sdram_rw_test(
	input							i_clk,//输入时钟50M
	input							i_rst_n,//复位低有效

	inout   [15:0]       	io_sdram_data, //数据总线
	output               	o_sdram_clk, //sdram时钟,100MHz
	
	input							uart_rx,//串口输入
	output						uart_tx,//串口输出
	
	output 	[7:0]				SMG_Data,//输出段选信号(LEDA .. LEDH)
	output 	[5:0]				Scan_Sig, //输出列扫描信号(SEL0_T~SEL5_T)

	output  [14:0]				o_sdram_addr,//输出sdram地址	
	output						o_sdram_cke,//输出sdram时钟片选
	output						o_sdram_cs,//输出sdram片选
	output						o_sdram_ras,//输出sdram行有效
	output						o_sdram_cas,//输出sdram列有效
	output						o_sdram_we, //输出sdram写有效
	output              		o_sdram_ldqm,//数据掩码
	output              		o_sdram_udqm //数据掩码

);


wire					i_rd_trig;
wire					i_wr_trig;
wire					i_rd_done;
wire					i_wr_done;
wire					o_data_indi;
wire					o_wr_indi;
wire					rdsig;
wire					wrsig;
wire	[7:0]			data_out;
wire	[15:0]		wr_data;


reg 	[15:0] 		rd_data;
reg					sdram_out_en;
reg 	[15:0]  		sdram_wr_data ;//写数据



//100M输出
wire clk1_100M;

pll	pll_inst (
	.inclk0 ( i_clk ),
	.c0 ( clk1_100M )
	);
		
//串口模块
uart_top	uart_top_inst(
			.i_clk(clk1_100M),//输入时钟
			.i_rst_n(i_rst_n),//复位低有效
			.wrsig(o_data_indi),//串口发送使能信号,上升沿有效
			.data_in(rd_data),//串口发送输入数据
			.tx(uart_tx),//串口发送端口
			

			.rx(uart_rx),//串口接收端口
			.rdsig(rdsig),//串口接收完成信号
			.data_out(data_out)//串口接收输出数据
    
    );	
	

//数码管模块
smg_interface smg_interface_inst
	 (
			.CLK( i_clk ),
			.RSTn( i_rst_n ),
			.Number_Sig( rd_data ), // input - from U1
			.SMG_Data( SMG_Data ),     // output - to top
			.Scan_Sig( Scan_Sig )      // output - to top
	 );

 
	 
//SDRAM模块
sdram_top	sdram_top_inst(
			.i_clk(clk1_100M),//输入时钟100M
			.i_rst_n(i_rst_n),//复位低有效
			.i_rd_trig(i_rd_trig),//读触发
			.i_wr_trig(rdsig),//写触发

			.i_rd_done(i_rd_done),//sdram读完成指示信号
			.i_wr_done(i_wr_done),//sdram写完成指示信号

			.o_wr_indi(o_wr_indi),//写数据有效
			.o_data_indi(o_data_indi),//读数据有效
			
			.o_sdram_clk(o_sdram_clk),//sdram时钟,100MHz
			.o_sdram_addr(o_sdram_addr),//输出sdram地址	
			.o_sdram_cke(o_sdram_cke),//输出sdram时钟片选
			.o_sdram_cs(o_sdram_cs),//输出sdram片选
			.o_sdram_ras(o_sdram_ras),//输出sdram行有效
			.o_sdram_cas(o_sdram_cas),//输出sdram列有效
			.o_sdram_we(o_sdram_we), //输出sdram写有效

			.o_sdram_ldqm(o_sdram_ldqm),//数据掩码
			.o_sdram_udqm(o_sdram_udqm)//数据掩码
);


assign	io_sdram_data = sdram_out_en ? sdram_wr_data:16'bz;

assign	wr_data	=	data_out;//串口接收的数据送入sdram写端口  

assign	i_rd_trig =  (o_wr_indi)? 1'b1:1'b0;//产生读触发命令

//SDRAM输出数据使能
always@(posedge clk1_100M or negedge i_rst_n)begin
		if(i_rst_n == 1'b0)
			sdram_out_en <= 1'd0;			
		else if(o_wr_indi)	
			sdram_out_en <= 1'b1;
		else
			sdram_out_en <= 1'b0;
end

//SDRAM写数据
always@(posedge clk1_100M or negedge i_rst_n)begin
		if(i_rst_n == 1'b0)
			sdram_wr_data <= 16'd0;			
		else if(o_wr_indi)	
			sdram_wr_data <= wr_data;	
end


//SDRAM读数据
always@(posedge clk1_100M or negedge i_rst_n)begin
		if(i_rst_n == 1'b0)
			rd_data <= 16'd0;			
		else if(o_data_indi)	
			rd_data <= io_sdram_data;	
end

endmodule

 将工程生成的jic文件下载到开发板

开发板上电运行状态 

连接串口发送一个34

使用SignalTap来捕捉串口数据

串口发送89,捕捉串口接收模块

rdsig上升沿表示串口接收完成信号,可以看到捕捉到89

可以对照这个命令状态机看采集的波形是否正常 

 

单字节读 

读时序

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值