在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 22717|回复: 33

[求助] Xilinx开发板Block RAM的使用

[复制链接]
发表于 2013-6-9 16:44:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
刚刚入门,用ipcore生成了一个single port的bram,但是读写操作不知道该如何下手。哪位大大有基于ip core的bram的读写范例可以share一下的么?感激不尽!
发表于 2013-6-9 17:43:23 | 显示全部楼层
生成的ipcore的工程目录下就有example design,有testbench,仿真以下就知道了
发表于 2013-6-11 18:15:20 | 显示全部楼层
:):):):):):):)
发表于 2013-6-11 21:56:38 | 显示全部楼层
example_design文件下有几个VHD文件,怎么用来仿真?   求教一下哈。。
 楼主| 发表于 2013-6-13 13:45:42 | 显示全部楼层
回复 2# warking
谢谢回复!不过example是vhdl的,我想用verilog来看一下,请问您有相关的例程么?谢谢。
发表于 2013-6-13 15:06:22 | 显示全部楼层
下面是某官方的一个小例子,从下面的代码中可以自动综合出single port ram的

Verilog HDL Single-Clock Synchronous RAM with No Read-
Through-Write Behavior
module ram_infer (q, a, d, we, clk);
output reg [7:0] q;
input [7:0] d;
input [6:0] a;
input we, clk;
reg [7:0] mem [127:0];
always @ (posedge clk) begin
if (we)
mem[a] <= d;
q <= mem[a]; // Non-blocking write assignment means
                        // q doesn't get d in this clock cycle
end
endmodule

例化IP也是相似的,lz具体说下,上面这个程序,哪些/个地方有困扰?
 楼主| 发表于 2013-6-14 14:21:16 | 显示全部楼层
本帖最后由 cqugjw 于 2013-6-14 14:31 编辑

回复 6# yadog

谢谢斑竹的回复,基于IP core的single port ram我已经读写成功了。先分享下代码:
先用core gen生成了一个8*8bit的single port ram,加载COE初始化文件:ABCDEBDA,直接例化。
Verilog部分代码:
module bramtest(
    input clk,input rst_n,
input ram1_en,
input [7:0] dina,
input [2:0] addr,
input wea,
output [7:0] douta

);

  ram1 sp_ram (
      .clka(clk), // input clka
      .rsta(rst_n), // input rsta
      .ena(ram1_en), // input ena
      .wea(wea), // input [0 : 0] wea
      .addra(addr), // input [2 : 0] addra
      .dina(dina), // input [7 : 0] dina
      .douta(douta) // output [7 : 0] douta
      );

endmodule

testbench部分代码:
module bramtest_test;
// Inputs
reg clk;
reg rst_n;
reg ram1_en;
reg [7:0] dina;
reg [2:0] addr;

// Outputs
reg wea;
wire [7:0] douta;

// Instantiate the Unit Under Test (UUT)
bramtest uut (
.clk(clk),
.rst_n(rst_n),
.ram1_en(ram1_en),
.dina(dina),
.addr(addr),
.wea(wea),
.douta(douta)

);


initial begin

// Initialize Inputs
clk = 0;
ram1_en = 1;
rst_n = 0;
dina = 0;
addr = 0;
wea = 1;

#60 wea = 0;

end

always #10 clk = ~clk;
always #20 begin dina <= dina + 1; addr <= addr+1; end

endmodule

仿真波形:

single port ram仿真波形

single port ram仿真波形
 楼主| 发表于 2013-6-14 14:47:05 | 显示全部楼层
本帖最后由 cqugjw 于 2013-6-14 14:48 编辑

回复 6# yadog
这是我写的simple dual port的仿真,8*8bit,相同的初始化coe文件,所以我写了testbench想先把这几个数据读出来,但是一直得不到正确结果。源代码贴上烦请帮忙分析一下(没有用到rst pin)
Verilog部分:
module sdp_bram(
    input clk,
input rst_n,
input [7:0] dct_in,
output [7:0] dct_out
    );
reg ena;
reg wea;
reg [2:0] addra;
reg enb;
reg [2:0] addrb;


sdp_ram sdp_ram (
  .clka(clk), // input clka
  .ena(ena), // input ena
  .wea(wea), // input [0 : 0] wea
  .addra(addra), // input [2 : 0] addra
  .dina(dct_in), // input [7 : 0] dina
  .clkb(clk), // input clkb
//  .rstb(rst_n), // input rstb
  .enb(enb), // input enb
  .addrb(addrb), // input [2 : 0] addrb
  .doutb(dct_out) // output [7 : 0] doutb
);

endmodule


testbench部分:
module sdp_bram_test;
// Inputs
reg clk;
//reg rst_n;
reg [7:0] dct_in;
// Outputs
wire [7:0] dct_out;
reg ena;
reg wea;
reg [2:0] addra;
reg enb;
reg [2:0] addrb;
// Instantiate the Unit Under Test (UUT)
sdp_bram uut (
.clk(clk),
.rst_n(rst_n),
.dct_in(dct_in),
.dct_out(dct_out)

);

initial begin

// Initialize Inputs
clk = 0;
ena = 0;
enb = 1;  //读使能
//rst_n = 0;
dct_in = 0;
addra = 0;
addrb = 0;
wea = 0;

// Wait 100 ns for global reset to finish
#400 wea = 1;
// Add stimulus here
end

always #10 clk = ~clk;
always #20 begin  addrb <= addrb+1; end //依次读出8个地址的数据
//


endmodule

仿真结果:输出一直是0,无法读出初始化值。

sdpram仿真.PNG
发表于 2013-6-17 09:50:08 | 显示全部楼层
回复 8# cqugjw

没太明白没用rst?
如果是所例化的IP选择了有rst输入,那么在例化时必须得给rst一个明确的状态,使得该IP可以动


是有什么特别的原因使得lz无法输入rst?
 楼主| 发表于 2013-6-17 11:30:29 | 显示全部楼层
回复 9# yadog
我用core gen生成IP核的时候,RST这个pin是可选的,我就没有勾上。想先做个简单的实验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 18:52 , Processed in 0.026483 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表