【问题标题】:Design a 256x8 bit RAM using 64 rows and 32 columns programmatically using VHDL使用 VHDL 以编程方式设计使用 64 行和 32 列的 256x8 位 RAM
【发布时间】:2013-09-26 10:56:42
【问题描述】:

我是 VHDL 编程的新手,我将做一个关于内置自我修复的项目。在这个项目中,我将设计不同大小的 RAM(256 B、8kB、16kB、32kB)等。并且这些 ram 必须使用 BIST 进行测试,然后它们应该被修复。所以请举个例子来帮助我,比如如何设计带有“n”行和列的 RAM

【问题讨论】:

  • VHDL 没有固有的 RAM 行和列的概念,那么这是什么意思?另外,您所说的“修复”是什么意思?启动时是否会用一些备用单元替换故障单元?有关 VHDL 中 RAM 推断的 VHDL 示例,您可以查看Block and distributed RAM
  • 我已经使用数组实现了一个 RAM 结构,参考了你建议的链接。我需要设计一个具有特定行和列的 RAM,类似于 RAM 的硬件架构。修复是指通过用备用行和列替换故障位置对应的行和列来修复被测内存(内置冗余分析(BIRA)方法。

标签: vhdl hdl


【解决方案1】:

首先在您想要的抽象级别(可能是门级)绘制 RAM 的框图。然后用VHDL描述框图。

您可能应该将自己限制在行为描述上,即不要期望能够综合它。 FPGA 的综合通常需要寄存器传输级别的描述,而我不建议 VHDL 初学者使用 ASIC 综合。

【讨论】:

    【解决方案2】:

    我假设您想使用 SRAM,因为这是最简单的情况。另外,假设您想用 RAM_DEPTH 字对 RAM 建模,每个字都是 RAM_DATA_WIDTH 位宽。一种可能的方法是在三个模块中构建您的解决方案:

    1. 一个保存 RAM 位的模块。此模块应具有 RAM 的典型端口:时钟、复位(可选)、write_enable、data_in、data_out。请注意,每个 RAM 字的宽度应足以容纳数据位以及奇偶校验位,奇偶校验位是冗余位,可让您纠正任何错误。您可以在此处阅读有关用于内存校正的汉明码:http://bit.ly/1dKrjV5。您可以在此处查看 Doulos 的 RAM 修改示例:http://bit.ly/1aq1tn9

    2. 第二个模块循环遍历所有内存位置,根据需要修复它们。这应该在重置后立即发生。请注意,这可能需要很多时钟周期(至少 RAM_DEPTH 时钟周期)。另请注意,它不会在 VHDL 中实现为循环。您可以使用计数器来实现它,然后将计数值用作读取地址,通过 EDC 函数传递数据值,然后将校正后的值写回 RAM 模块。

    3. 顶级实体(可选),实例化模块 (1) 和 (2),并协调流程。该模块可能有一个“init_done”引脚,在验证和纠正发生后将被断言。使用 RAM 的模块应检查此引脚,以了解开始使用 RAM 是否安全。

    总而言之,您可以在复位时遍历所有内存位置,并根据需要使用纠错码修复它们。在确保所有内存位置都正常后,只需声明一个“init_done”信号。

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 2020-11-25
      • 2018-08-10
      • 2014-08-15
      • 2012-06-18
      • 2013-05-19
      • 1970-01-01
      • 2011-05-04
      相关资源
      最近更新 更多