FPGA之RAM详解,真双口RAM的使用

真双口RAM IP练习

        真双口RAM可以说是灵活性最大的RAM IP核,因为它赋予了用户最大的设计空间,两个可以独立读写地址空间的端口,充分释放了FPGA程序设计上的可能。 但是实际上真双口RAM在工程项目中还是和单双口RAM一样使用频率比较低的,因为其太过灵活自由了,就导致了用户在设计程序的过程中,比较难以驾驭,最大的苦恼即来自于两个独立读写端口的不可避免的读写冲突,当然也有一些FPGA工程师单独做了一个相对复杂的读写状态机,在程序设计上可以规避读写冲突,但是笔者也和大部分朋友们一样,比较青睐于简单的设计方式,在大部分情况下简单的就是最好的,在保证设计效果的同时,兼顾代码的易读性和实用性可能是一名优秀的FPGA工程师必备技能。

       这里也设计一个简单的模块用以测试真双口RAM的各个输入信号接口的功能,本模块包含读写位宽均为8位,读写深度是256的真双口RAM,先通过端口A对0-31地址写入数据0-31,然后读0-31地址的数据,再通过端口B再对0-31地址写入数据32-63,然后读0-31地址的数据,如表1真双口RAM IP练习设计中的信号列表,如图1至图3,是对真双口RAM IP核的内存类型、端口AB的初始化配置。

      因为在IP核初始化时候选择的是写优先模式,所以当端口通过ram_din信号写入RAM的同时,ram_dout也会输出同样的写入数据,本模块的功能相对简单些,所以在这里笔者用了flag_sel信号量指示各个状态,而不再使用状态机去实现,简化了代码逻辑,当本模块收到了上游模块发来的ram_en使能信号,flag_sel由0置为1;接着当端口A完成了写入0-31地址的数据,且读完0-31的数据后,flag_sel由1置为2;最后当端口B完成了写入0-31地址的数据,且读完0-31的数据后,flag_sel由2置为0,完成整个对真双口RAM的模拟测试,整个代码设计不难理解,如图4是真双口RAM IP练习的代码设计。

信号列表

信号名

I/O

位宽

clk

I

1

rst_n

I

1

ram_en

I

1

ram_addra

O

8

ram_wea

O

1

ram_dina

O

8

ram_douta

O

8

ram_addrb

O

8

ram_web

O

1

ram_dinb

O

8

ram_doutb

O

8

表1 真双口RAM IP练习设计中的信号列表

    如图5真双口RAM IP核练习的输入信号激励设计,这里和单口RAM IP练习一样,只需要Testbench里给出模拟的ram_en使能信号即可。如图6所示是真双口RAM IP核练习的仿真结果,大家代入Modelsim后可以清楚地观察到,真双口RAM的两个端口均可以独立控制读写地址中的数据。

图1 真双口RAM IP核的内存类型配置

图2  真双口RAM IP核的端口A配置

图3 真双口RAM IP核的端口B配置

图4 真双口RAM IP练习的代码设计

图5 真双口RAM IP核练习的输入信号激励设计

图6 真双口RAM IP核练习的仿真结果

  • 21
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
双口RAM是一种具有两个独立读写地址空间的RAM IP核,它在FPGA程序设计中提供了最大的设计空间和灵活性。然而,由于其灵活性和自由度较高,实际上在工程项目中使用频率相对较低。这是因为在设计程序过程中,用户很难处理两个独立读写端口之间不可避免的读写冲突。一些FPGA工程师可能会使用复杂的读写状态机来规避读写冲突,但大多数人更倾向于简单的设计方式。在大多数情况下,简单就是最好的,既能保证设计效果,又兼顾代码的易读性和实用性。因此,选择使用IP核是比较可靠和成熟的方法。在IP核的定制中,可以选择是否寄存原语输出和IP输出。选择寄存会导致输出延迟一拍,选择同时寄存原语和IP输出会延迟两拍。在设计中,选择了IP核寄存,并且由于输出固有的一拍延迟,所以总共延迟两拍。RAM是随机存取存储器的缩写,是与CPU直接交换数据的内部存储器。在Quartus II中,生成RAM IP核时有两种可选:单口RAM双口RAM双口RAM又分为简单双口RAM双口RAM。简单双口RAM有一个读端口和一个写端口,写端口只能写不能读,读端口只能读不能写。双口RAM有两个读/写端口,可以同时进行读写操作。 #### 引用[.reference_title] - *1* [FPGARAM详解双口RAM使用](https://blog.csdn.net/wandou0511/article/details/123262321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [FPGA设计心得(1)双口RAM使用及其仿问题记录](https://blog.csdn.net/Reborn_Lee/article/details/106000966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【小月电子】ALTERA FPGA开发板系统学习教程-LESSON14 IPCORE之双口RAM详细教程](https://blog.csdn.net/Moon_3181961725/article/details/126693294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值