FPGA学习-配置双口ram(嵌入式块ram应用)

本文详细描述了一次实验,通过FPGA的for循环操作,观察数据在双口RAM中的写入与读取过程,发现读取存在2拍延时。关键步骤包括配置IP核、编写testbench并分析波形。结论强调了读取时的延时注意事项。
摘要由CSDN通过智能技术生成

实验现象:

        用for循环模拟发送数据,FPGA接收后存储在双口ram中。延时一段时间后,从ram中按地址顺序提取数据,用for循环模拟FPGA发送数据。

第一步:

                        ​​​​​​​         

         一个“写”地址,一个“数据”端口,当“写请求”wren为高电平时,数据写到地址中去;

        “读”不需要请求,直接读取就OK。

 第二步:IP核配置

第三步:

        将右边出现的IP/dpram.qip文件设置为Top顶层文件;

        现在需要将.v文件添加进来,方便例化:ctrl+O-->进入之前保存到的IP文件夹-->打开dpram.v-->copy端口;

第四步:testbench编写

`timescale 1ns/1ns
`define clock_period 20
module dpram_tb;
	reg	       clock;
	reg	[7:0]  data;
	reg	[7:0]  rdaddress;
	reg	[7:0]  wraddress;
	reg	       wren;
	wire	[7:0]  q;

	integer i;                //for循环中的参量i

	dpram dpram(
		.clock(clock),
		.data(data),
		.rdaddress(rdaddress),
		.wraddress(wraddress),
		.wren(wren),
		.q(q)
	);

	initial clock=1;
	always #(`clock_period/2) clock=~clock;
	initial begin
		data=0;
		wren=0;
		wraddress=20;
		rdaddress=30;
		#(`clock_period*20);

		for(i=0;i<=10;i=i+1) begin   //for循环写入数据
			wren=1;
			data=255-i;
			wraddress=i;
			#`clock_period;
		end
		wren=0;
		#(`clock_period*20);

		for(i=0;i<=10;i=i+1) begin   //for循环读出数据
			rdaddress=i;
			#`clock_period;
		end 
		#(`clock_period*10);
		$stop;
	end
endmodule

第五步:波形图分析时序

图1.前仿真(故意有1ns延时)写入数据

图2.前仿真(故意有1ns延时)读出数据

图3.后仿真(无1ns延时)写入数据

 图4.后仿真(无1ns延时)读出数据​​​​​​​

结论:

        通过分析波形可知,给出地址后,“读”要延时2拍才能读出数据。因此如果给出地址就读出数,当时读出的数据是不对的,取不到该地址的数据。

        所以在读取ram中地址数据时需要注意这个2拍的延时。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值