XINLINX FPGA RAM使用-simple dual ram

现在vivado里选择IP->BRAM

相应的设置如下,这里使用的simple dual port

 PORT A设置

PORT B设置

测试用代码如下

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/11/02 15:30:56
// Design Name: 
// Module Name: led
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module led(
    input clk,
    input rst_n,
    output reg[1:0]led
    );

reg ena;
reg wea;
reg [3:0]addra;
reg [7:0]dina;

reg  enb;
reg  [3:0]addrb;
wire  [7:0]doutb;


reg [7:0]cnt;
//write
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else begin
     if(cnt == 20)begin   
     cnt <= 0;
     end
     else begin
     cnt <= cnt + 1'b1;
     end
end
end

//write
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
ena <= 0;
wea <= 0;
addra <= 0;
dina <= 0;
addrb <= 0;
enb <= 0;
end
else begin
     if(cnt == 1)begin
     ena <= 1;
     wea <= 1;
     end
     else if(cnt > 1 && cnt < 8)begin
     addra <= addra + 1'b1;
     dina <= dina + 1'b1;
     end
     else if (cnt == 8)begin
     ena <= 0;
     wea <= 0;    
     end
     else if (cnt == 9)begin  
     enb <= 1;
     end
     else if(cnt > 9 && cnt < 16)begin
     addrb <= addrb + 1'b1;
     end
     else if (cnt == 17)begin
     wea <= 0;    
     enb <= 0;
     end
end
end



blk_mem_gen_0 your_instance_name (
  .clka(clk),    // input wire clka
  .ena(ena),      // input wire ena
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addra),  // input wire [3 : 0] addra
  .dina(dina),    // input wire [7 : 0] dina
  .clkb(clk),    // input wire clkb
  .enb(enb),      // input wire enb
  .addrb(addrb),  // input wire [3 : 0] addrb
  .doutb(doutb)  // output wire [7 : 0] doutb
);

endmodule

 Testbench如下

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/11/23 13:17:00
// Design Name: 
// Module Name: tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb(

    );
reg clk;
reg rst_n;
wire [1:0] led; 
    
led u1(
    .clk(clk),
    .rst_n(rst_n),
    .led(led)
    );    
  
initial                                                
begin  
clk = 0;
rst_n = 0;
#200
rst_n = 1;
#1000_000
$stop;
end
 
always #10 clk = ~clk;
    
    
endmodule

 仿真波形如下,可以看到portA写入的数据,可以从portb读出。

 以上用的是No change模式,接下来试下其他的模式,试了下write first,波形没有变化。

write first的意思是在写入的同时,会同时输出的out上。在这个模式没有变化,可能是因为不存在冲突吧。

 

 接下来试下ECC功能,勾选以后多了biterr位

 后面再试试如何使用,

待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值