【问题标题】:Data being written on same address in multi-write port RAM数据写入多写端口 RAM 的同一地址
【发布时间】:2019-04-24 07:17:42
【问题描述】:

我的 RAM 中有 3 个写端口和 1 个读端口。所有端口都以相同的频率工作。如果我的写端口在内存的不同地址写入数据,那么没关系,但是如果所有三个写端口都在正常地址位置写入数据会发生什么。我知道它会在那个位置变成“未定义的数据”。那么要怎么做才能防止出现这种情况。我无法合并所有写入端口并使其成为一个,因为它以相同的频率工作。我必须将所有写入端口分开。

我正在考虑根据端口对内存进行分区,即第一个端口将访问内存的某些部分,第二个端口将访问内存的另一部分,类似地第三个。但我不认为它会起作用,因为也会有一些不容忽视的问题。那么谁能告诉我如何在具有 3 个端口以相同频率工作的内存上写入数据?

【问题讨论】:

  • 如果您不想进行仲裁,那么您需要指定您希望发生的行为。您想对所有数据进行 OR/AND 运算吗?您是否希望端口 2 优先于端口 1,端口 3 优先于两者?也许你想要三个独立的记忆,然后你可以以某种方式处理这个问题?
  • 内存必须是通用的,这就是问题所在。你能建议我用什么方法在不同的内存上写入数据并使其成为一块内存吗?

标签: verilog ram


【解决方案1】:

没有简单的解决方案。

大多数双端口数据属于生产者-消费者类型,因此读取数据指针始终位于写入数据指针之后。 FIFO 就是一个很好的例子。

如果您确实有多个进程可以写入同一位置,那么您就有问题了。我强烈怀疑您的系统设计错误。

在 Verilog 中,您可以检查写入地址是否相同,当它们相同时,使用仲裁器一次只让一个通过。然后,您将拥有“定义的数据”。但是,您仍然会遇到竞争条件,因为 CPU 读取可能会在任何写入之间发生并获取“旧”数据。

【讨论】:

  • 我曾考虑过仲裁器,但这里的问题是仲裁器将从同时写入的其中一个数据中进行选择,并且只有其中一个数据将写入内存,而另一个数据将丢失。我不能承受这里的数据丢失。我的系统设计在任何方面都没有错误,因为我只想在相同/不同时间在不同地址位置将数据写入公共内存,但唯一导致问题的是数据同时写入同一个位置。
猜你喜欢
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多