利用modulesim对FPGA的ip核ram进行仿真

1.第一步这次仿真的是ram,先说下ram原理,缓存数据。对数据进行缓存,然后通过接口把数据传输出去。

 

 

 

 

 

 

 

2.这次仿真的是简单双口ram核,在ise的图形化设置界面可以看到。所以不再次赘述,但是仿真的时候,一定要保证对应位宽相同。是8位就是8位,少了多了都不行,例化的时候,我改小的时候,数据一直传输不出来,输出的数据一直处于高阻态。其他的信号都是可行的。错误的示范,如下图所示。

            可以看到输出的数据处于无效状态,说明ip核ram有问题,可能是线没链对,也可能是别的原因。所以需要调开ram看波形,发现输入口的数据压根就没有输进去,情况如下

 

  

 

             这时候就需要去检查程序了,我找了好久,潜意识任务我申请为8的位宽,只用5位宽是可以的,事实上,仿真的不允许的,一个线必须对应一根线,也就是仿真产生的数据,必须对应位宽,必须一致。

3.仿真程序

module sim_ram(
		
		input wire sclk,
		input wire rst_n,

		output [7:0]out_data

);

reg [7:0]	data_in;    //产生数据,当时仿真位宽[4:0]导致信号悬空处于高阻态
reg  		w_en;		//写使能
reg  		r_en;		//读使能
reg [5:0]	addra_in;  //写地址产生
reg [7:0]   addra_out; //读地址产生


always@(posedge sclk or negedge rst_n)   //产生数据 0~63
		if(!rst_n)
			data_in<=10'd0;
		else data_in<=data_in+1'b1;
		
always@(posedge sclk or  negedge rst_n)   //产生写使能;工程应用的时候,如果拉高写使能会覆盖原始数据
		if(!rst_n)
			w_en<=1'b1;
		else if(addra_in==10'd63)
			w_en<=1'b0;
			else if(addra_out==10'd63)  //写使能拉低的条件是跟°地址写地址有关
			    w_en<=1'b1;	

always@(posedge sclk or negedge rst_n)  //产生写地址
		if(!rst_n)	
			addra_in<=10'd0;
		else if (w_en==1'b0)   //	清零条件没写对当时写的是高状态   
				addra_in<=10'd0;
			else if (w_en==1'b1)  
					addra_in<=addra_in+1'b1;
					
always @(posedge sclk or negedge rst_n)  //产生读使能
		if(!rst_n)
		 r_en<=1'b0;
		 else if(w_en==1'b1)	
		 	r_en<=1'b0;	
		 else if(w_en==0)
		 	r_en<=1'b1;
				
always@(posedge sclk or negedge rst_n)    //产生读地址
	if(!rst_n)
		addra_out<=10'd0;
		else if(r_en==1'b0)
			addra_out<=10'd0;
			else if(r_en==1'b1)
				addra_out<=addra_out+1'b1;

ram_64 ram_64_inst(
  .clka				(sclk), // input clka
  .wea				(w_en), // input [0 : 0] wea
  .addra			(addra_in), // input [5 : 0] addra
  .dina				(data_in), // input [7 : 0] dina
  .clkb				(sclk), // input clkb
  .addrb			(addra_out), // input [5 : 0] addrb
  .doutb			(out_data) // output [7 : 0] doutb
);
endmodule

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值