我的RAM中有3个写端口和1个读端口。所有端口均以相同的频率工作。如果我的写端口在不同的内存地址上写数据,那没关系,但是如果所有三个写端口在同一个地址位置上写数据将会发生什么。我知道它将在该位置显示为“未定义的数据”。那么该怎么做才能防止这种情况。我无法合并所有写入端口,并使其成为一个,因为它以相同的频率工作。我必须将所有写端口分开。
我当时正在考虑根据端口对内存进行分区,即第一个端口将访问内存的一部分,第二个端口将访问内存的另一部分,类似地,第三个端口。但是我认为这不会奏效,因为还有一些不可忽视的问题。那么谁能告诉我该如何在具有3个端口且以相同频率工作的存储器上写入数据?
答案 0 :(得分:1)
没有简单的解决方案。
大多数双端口数据都是生产者-消费者类型,因此读数据指针始终在写数据指针之后。 FIFO是一个很好的例子。
如果您确实有多个可以写入同一位置的进程,则有问题。我强烈怀疑您的系统设计错误。
在Verilog中,您可以检查写入地址是否相同,以及当它们相同时,使用仲裁器一次只允许一个通过。然后,您将获得“定义的数据”。但是,您仍然会遇到争用情况,因为任何写入之间都会发生CPU读取,并拾取“旧”数据。