赛灵思
直播中

徐丹

7年用户 291经验值
私信 关注
[问答]

请问BRAM原始未使用地址现在被绑定为高?

比bug更有用的信息。
刚刚发现,即使在我的实现中,最终的路由决定了,因为我有一个未使用的地址,它会把它绑成HIGH?
阅读有关BRAM Generator更改的2013.3发行说明表明情况就是如此,在查看V7内存指南时也是如此。
对BRAM Primitive Address进行一些搜索后发现了这个问题。
附图显示了一个15位地址进入我的自定义模块,相同的15位总线连接到ADDRADADDR [15:0]引脚,其中一个常数零连接到同一总线。
这是“实现”原理图,Synthesized看起来一样。
但在实际使用中,我注意到该存储器的地址位[15]在实际硬件中很高!
这对我来说很重要,因为这个“真正的双端口”的B端连接到Microblaze设计,我的代码将数据放入预期位置的内存中。
这个小虫子花了我大约3天的时间来发现超过5天(花了2天时间试图找到一种代码来解决它的方法)。
所以只是希望别人意识到这个有趣的行为。
TomT ...

回帖(4)

罗宏达

2020-7-20 16:02:17
位A [15]用于64x1级联模式。
如果BRAM不处于级联模式,则A [15]必须是常数1.如果它未连接或连接到逻辑0,则工具将连接到1t。
举报

李亮涟

2020-7-20 16:09:15
该存储器处于级联模式,可以从所有16位接线的接口的Microblaze侧确认。
这是一个多用途的Memory Wrapper,用于构建高效的64K深x N存储器,其组织以data2mem友好的方式设置(参见我的提取脚本的TCL论坛)。
这种用法的问题是数据方面没有使用64K深,而是使用32K深。
我完全同意第15位未被使用(假设地址[15:0]),但我遇到的问题是,当原理图清楚地表明它应该被束缚为低时,未使用的位在最终路径中被绑定为高?
现在,在阅读了几篇Xilinx文档后,我明白为什么会这样 - 我只是希望其他人知道这种行为。
所以从B方面我把地址“0x0000”中的东西放在A侧的“0x0000”处读取,但我发现它在“0x8000” - 这完全出乎意料并且花了我几天的时间
提及。
使用chipcope没有用,因为我在B侧有16位总线,在A侧有15位总线。
也许用FPGA编辑器进入实现我会看到它 - 真的!
我已经在实际的硬件中使用这个级联内存数月而没有问题;
我们最近重新使用它并发现了这个有趣的行为。
我现在正在添加额外的参数以允许这种情况。
TomT ...
举报

李亮涟

2020-7-20 16:21:01
ralfk,
你能否向我确认,如果一个RAMB地址引脚接地,就像我在原理图中显示它将被“绑定高电平?”取代一样,那么它的预期行为是什么?
我相信,如果一个引脚通过地面连接到低位,那么它被认为是被使用的。
但如果不是这种情况,我会注意到它。
我过去曾使用内存进行状态机设计,并且可能基于选择哪个SM将中间地址位置为低电平;
知道这种行为真的是我所追求的。
一旦我听到Xilinx的某个人确认我的发现,我会将此作为解决方案。
TomT ...
举报

罗宏达

2020-7-20 16:38:36
RAMB36E1中的A15引脚应仅用于级联。
在所有其他情况下,A15应保持未连接或高电平。
因此,如果使用两个32x1构建带有RAMB36E1的64x1,那么第15位不应该是常量。
此规则仅适用于位A15。
所有其他地址位可以根据需要绑定在应用程序中。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分