问题:如果ram读写的地址超过了ram的实际大小,会出现什么情况
如果使用IP core定制的一个ram大小为24个字,
那么读写地址都应该是5位的,即00000-10111
如果读写的地址变成了11111,且此时的读写都为使能,在做modelsim仿真的时候,这种情况是高阻状态,实际中如果这样的bug在板子上了,会出现什么情况呢?
关键看地址译码。
地址译码?
怎么理解,能详细说一下嘛。
3Q
Normal need to use enable signal to define address 00000~10111 , if CPU embed that to access address 11111 system may be free run
读写使能的同时,在写地址满时,应该归0,否则时序就错了
这个我知道的。
情况是这样的,我现在再看师兄的代码,他的这个代码是属于一个比较大的航天方面的信号处理,在实际应用中没有出错(XX单位已经验收过了),然后我就发现了这个问题,就如我所描述,当read_addr = 11111时候,都使能是允许的,但是这个时候读出来的数据并没有用,而是调整时序在地址为0-23时候读出的数据才使用。
但是我觉得这个会不会有什么大点的影响,所以我就问问。
补充一下就是,write_addr = 11111时候,写使能也是有效的。
这样的话,到底会有影响?
看你的逻辑设计了,这个你自己应该要有处理逻辑
见6L的补充。重点就是,当read_addr = 11111时候,读使能是允许的,但是这个时候读出来的数据并没有用,而是调整时序在地址为0-23时候读出的数据才使用。
一头雾水。
雾水。
关键看IP core地址译码,如果是Altera的Cyclone系列Memory Block,实际大小是32(或者36)。
也就是说,在仿真的时候,它认为的是24个字的,超出了会认为出错,即将数据线变成了高阻; 而程序真正烧入板子上了,大小其实是32(或者36).
是这个意思吧?
对了,用的是xilinx的 v4的fpga
对,我就是有这个疑问
纯属个人意见。如有错误请高手指正
就看你用的core是怎么设计啦。如果有地址译码限制,就不会出错。如果没有。出现这样的情况就进入未知状态。没办法知道会读写什么数据的。如果你在程序里有对地址范围的限定,或者可以保证地址数据都在有效范围内。当然没什么影响,如果不能。就存在隐患了。就像case一定需要default一样。不然程序就有可能存在隐患。
而且core也是不同的。有rtl级。有布局布线级的。具体的就要分析底层结构了
