小武学fpgastep6

ram的使用

1.使用ip核的步骤

在ipcatlog那里搜索memory选择blockmemory genderator 

Dual Port ROM(双端口 ROM),这里选择 Single Port RAM,即配置成单端口 RAM。 

 2.然后是选择位宽跟深度

 

 3.ip核就配置好了。然后写使用的步骤。

当ena为高的时候可以使用ip核,wea为高的时候开始写入数据,wea为低的时候读出数据。

地址是0-31.注意小于31的时候就要换了不能是等于要不然时序会差一点。

module ram_use(
input clk,
input rst_n,
output reg  [7:0] wdata,
output   [7:0]rdata,
output  reg  [4:0]addra,
output   enram,
output    wea 
    );
     reg [6:0]cnt;
   assign wea = (cnt<=6'd31&rst_n)?1'b1:1'b0;
   assign  enram = rst_n; 
   always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        cnt<=0;
    else if(cnt<7'd63)
        cnt<=cnt+1'b1;
    else 
        cnt<=1'b0;
    end  
   always @(posedge clk or negedge rst_n) begin
       if(rst_n == 1'b0)
            addra <= 1'b0;
       else if(addra == 5'd31)//在计数器的 0-31 范围内,RAM 写地址累加
            addra <= 1'b0;
      else 
            addra <= addra + 1'b1;
  end
	always @(posedge clk or negedge rst_n) begin//自己写的往里面添加的数据
	if(rst_n == 1'b0)
		wdata <= 1'b0; 
	else if(cnt < 6'd31) 
		wdata <= wdata + 2'd2;
 	else 
 		wdata <= 1'b0 ; 
 	end 

    
endmodule

顶层调用,又加了一个ila探针来看波形。ILA的使用就不写了

module ip_ram100t(
input clk,
input rst_n
    );
    wire [7:0] wdata;
    wire [7:0] rdata;
    wire [4:0] addr;
    wire enram;
    wire wea;
    ram_use ram_use_u(
    .clk  (clk) ,               
    .rst_n(rst_n) ,             
    .wdata(wdata) ,     
    .rdata(rdata) ,  
    .addra(addr) , 
    .enram(enram) ,          
    .wea  (wea)         
    );
    
 blk_mem_gen_0 your_instance_name (
  .clka(clk),    // input wire clka
  .ena(enram),      // input wire ena
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addr),  // input wire [4 : 0] addra
  .dina(wdata),    // input wire [7 : 0] dina
  .douta(rdata)  // output wire [7 : 0] douta
);

 ila_0 ILA_123 (
	.clk(clk), // input wire clk
	.probe0(rst_n), // input wire [0:0]  probe0  
	.probe1(enram), // input wire [0:0]  probe1 
	.probe2(wea), // input wire [0:0]  probe2 
	.probe3(addr), // input wire [4:0]  probe3 
	.probe4(wdata), // input wire [7:0]  probe4 
	.probe5(rdata) // input wire [7:0]  probe5
);   
    
    
    
endmodule

ila时序图

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值