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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12333|回复: 7

[求助] 请问Xilinx FPGA开发板里的BRAM,对于小设计一般怎么使用?

[复制链接]
发表于 2014-4-16 00:48:55 | 显示全部楼层 |阅读模式

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

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

x
我的RTL设计很小,就是从BRAM中某些地址读出数据,然后加法运算,最后存回去。
用不到Microblaze这种处理器的IP。
但是我搜到的大部分例子,都是用Microblaze-PLB Bus-BRAM这种连接方法,请问我这种小电路,应该怎么使用BRAM呢?

我的困惑是,BRAM不是综合出来的netlist, 那么它和Verilog RTL设计是不同的, 虽然可以用行为级module做仿真,但是真正用到BRAM的时候是怎么操作的呢?比如怎么在Verilog中例化它,怎么才能真正地把自己的小design连接到BRAM的各个端口信号?
发表于 2014-4-16 08:43:06 | 显示全部楼层
BRAM就是一RAM,跟普通的RAM操作都一样,读、写、地址、数据什么的,时序很简单。之所以叫BRAM(块RAM)是相对于分布式RAM而言的,两者的差别在于FPGA内部用什么资源实现。
对于我们这种菜鸟级用户,看到的BRAM只是一个黑盒子,所以直接在你的设计中例化用CoreGenerate产生的模块就行了。
 楼主| 发表于 2014-4-19 06:29:54 | 显示全部楼层
回复 2# huiyuanai3

多谢大侠回帖。
我用Core  generator 生成了一个BRAM.xco 文件,然后在同一个project里试图用一个叫TopBRAM.v的文件来例化我刚生成的BRAM。
为了简单处理,我在TopBRAM.v中没有做任何操作,只是试图例化BRAM:
module TopBRAM(clk, leds
    );
input clk;
output [7:0] leds;
wire wea;
wire [9:0] addra;
wire [7:0] dina;
wire clk;
wire ena;
BRAM mybram(.wea(wea), .addra(addra), .dina(dina), .clka(clk), .ena(ena));
endmodule

结果得到以下错误信息,请问大侠我还有那些操作没有考虑到?
WARNING:HDLCompiler:1016 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 30: Port douta is not connected to this instance
WARNING:HDLCompiler:1499 - "C:\Xilinx\DesignFiles\IPBRAM\ipcore_dir\BRAM.v" Line 39: Empty module <BRAM> remains a black box.
WARNING:HDLCompiler:634 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 25: Net <wea> does not have a driver.
WARNING:HDLCompiler:634 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 26: Net <addra[9]> does not have a driver.
WARNING:HDLCompiler:634 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 27: Net <dina[7]> does not have a driver.
WARNING:HDLCompiler:634 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 29: Net <ena> does not have a driver.
WARNING:Xst:653 - Signal <addra> is used but never assigned. This sourceless signal will be automatically connected to value GND.
WARNING:Xst:653 - Signal <dina> is used but never assigned. This sourceless signal will be automatically connected to value GND.
WARNING:Xst:653 - Signal <wea> is used but never assigned. This sourceless signal will be automatically connected to value GND.
WARNING:Xst:653 - Signal <ena> is used but never assigned. This sourceless signal will be automatically connected to value GND.
WARNING:Xst:1814 - Core <BRAM.ngc> does not contain any logic.
发表于 2014-4-19 10:31:45 | 显示全部楼层
WARNING:HDLCompiler:1016 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 30: Port douta is not connected to this instance
BRAM例化端口douta没连
WARNING:HDLCompiler:634 - "C:\Xilinx\DesignFiles\IPBRAM\TopBRAM.v" Line 25: Net <wea> does not have a driver.
信号没给驱动
WARNING:Xst:653 - Signal <addra> is used but never assigned. This sourceless signal will be automatically connected to value GND.
地址线未赋值,综合优化连到GND了

BRAM不是说你例化了就能用,必须要有正确的控制逻辑,例化端口连接要完整。
发表于 2014-4-19 11:27:12 | 显示全部楼层
你可以直接把顶层例化文件和CoreGenerater产生的BRAM.v(打开看看和你想的是否一样)放到一个文件夹里,把这两个文件都当做你自己的设计文件,创建工程。
在实现阶段会提示错误。只需要在Implement的属性里面,把你生成BRAM的路径当做-sd的参数,即可。
 楼主| 发表于 2014-4-20 05:06:53 | 显示全部楼层
多谢各位大侠回复。我把完整的控制信号加上去了。
没有管 “Empty module <BRAM> remains a black box.” 还有 “Core <BRAM.ngc> does not contain any logic.” 这两个warning。
结果发现读操作正常工作,比如:
我的BRAM里存储的数据是
1000
0100
0010
0001
可以看到LED的流水变化。
唯一不爽的就是warning仍然去不掉。。。
我看到网上有人用infer来调用block RAM,请问这个infer和Core Gen有何区别呢?是不是我定义一个二维register,XST就自动综合成BRAM资源了呢?
 楼主| 发表于 2014-4-23 00:10:09 | 显示全部楼层
请问infer和Core Gen有何区别呢
 楼主| 发表于 2014-5-3 05:05:00 | 显示全部楼层
请问Core Gen和 infer这两种方法例化BRAM,本质上有何区别呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-22 08:40 , Processed in 0.020094 second(s), 7 queries , Gzip On, MemCached On.

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