首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VHDL语言以编程方式设计一个256x8位的64行32列RAM

使用VHDL语言以编程方式设计一个256x8位的64行32列RAM
EN

Stack Overflow用户
提问于 2013-09-25 16:50:24
回答 2查看 923关注 0票数 0

我是VHDL语言编程的新手,我要做一个关于内置自修复的项目。在这个项目中,我将设计不同大小的RAM (256B,8KB,16KB,32KB)等,这些RAM必须使用内建自测试进行测试,然后它们应该是repaired.So请给我一个例子,如如何设计具有'n‘行和列的RAM

EN

回答 2

Stack Overflow用户

发布于 2013-09-25 17:09:01

首先,在所需的抽象级别(可能是门级)绘制RAM的框图。然后用VHDL语言对系统的框图进行描述。

你可能应该把自己限制在一个行为描述上,也就是说,不要期望能够综合它。FPGA的综合通常需要寄存器传输级描述,而ASIC的综合不是我推荐给VHDL初学者的东西。

票数 1
EN

Stack Overflow用户

发布于 2013-09-26 09:53:55

我将假设您想使用SRAM,因为这是最简单的情况。另外,让我们假设您想要使用RAM_DEPTH字建模一个随机存取存储器,并且每个字都是RAM_DATA_WIDTH位宽。一种可能的方法是在三个模块中构建您的解决方案:

  1. 一个保存RAM位的模块。该模块应具有典型的内存端口:时钟、复位(可选)、write_enable、data_in、data_out。请注意,每个RAM字的宽度应足以容纳数据位,外加奇偶校验位,奇偶校验位是冗余位,允许您纠正任何错误。你可以在这里阅读到用于记忆校正的汉明码:http://bit.ly/1dKrjV5。你可以在这里看到一个来自Doulos的内存修改示例:http://bit.ly/1aq1tn9.
  2. A第二个模块,它循环遍历所有内存位置,根据需要修复它们。这应该在重置之后立即发生。请注意,这可能需要许多时钟周期(至少RAM_DEPTH时钟周期)。还要注意的是,它不会在VHDL中实现为循环。您可以使用计数器实现它,然后使用计数值作为读地址,通过EDC函数传递数据值,然后将校正后的值写回内存模块。
  3. 顶层实体(可选),它实例化模块(1)和(2),并协调该过程。此模块可以有一个'init_done‘引脚,它将在验证和纠正发生后被断言。此引脚应由使用内存的模块检查,以了解开始使用内存是否安全。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19000299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档