ViVADO综合- VIVADO综合推断当读取地址和输出数据在HDL代码中注册时,最优块RAM吗?

描述

VIVADO综合不推断最佳的块RAM时,真正的双端口块RAM的结构如下:

读地址注册+内存写+ O/P注册,这应该推断块RAM与DOA/DOB设置为1

VIVADO综合不将已注册的读地址打包到块RAM中。

什么是替代这个问题的解决方案,这样ViVADO综合将推断出一个最佳的块RAM并打包注册地址到块RAM中?

解决方案

下面是一个示例代码,其中ViVADO综合不推断最优的块RAM:

模块布鲁姆研究所

(参数数据宽度=32,
γ参数AddRead宽度=10)
(α)
输入数据〔(DATAWIWITH-1):0〕DATAAIN,
输入输入[ [(ADDRURWIDH-1):0 ] Read AdDR,Read EndAdDR,
输入输出,CLK,
输出输出Reg [(DATAWIWITH-1):0 ]数据输出

**(* RAMMyType =“Bug”*)Reg [DATAWIDWITH-1:0] RAM(2×*ADDRIWITH -1:0];
γ[AdRrdWith-1:0] Read

“永远”@(PASECLK CLK)开始
第二类:
(如果)开始
(a)
γ-端
A.Y.Y.A.Y.S.DATAXOUT <= RAM [Read OthDrReRg];
端部

终端模块

在上面的示例代码中,注册的读地址没有被打包到块RAM中。

为了绕过这个问题,上述HDL代码可以以以下方式重写,从而可以推断出最佳块RAM:

模块布鲁姆研究所

(参数数据宽度=32,
γ参数AddRead宽度=10)
(α)
输入数据〔(DATAWIWITH-1):0〕DATAAIN,
输入输入[ [(ADDRURWIDH-1):0 ] Read AdDR,Read EndAdDR,
输入输出,CLK,
输出α[(DATAWIWITH-1):0 ]数据输出

**(* RAMMyType =“Bug”*)Reg [DATAWIDWITH-1:0] RAM(2×*ADDRIWITH -1:0];
γ[AdRrdWith-1:0] Read

“永远”@(PASECLK CLK)开始
第二类:

(如果)开始
(a)
γ-端
γ端

*分配DATAXOUT= RAM [Read OpthDr.Reg ];

终端模块

模块顶部
(参数数据宽度=32,
γ参数AddRead宽度=10)
(α)
输入数据〔(DATAWIWITH-1):0〕DATAAIN,
输入输入[ [(ADDRURWIDH-1):0 ] Read AdDR,Read EndAdDR,
输入输出,CLK,
输出输出Reg [(DATAWIWITH-1):0 ]数据输出

γ线[DATAWIWITH-1:0] DATAYOUTUTMP;

γ- BrAMixNista(.DATAAL宽度(DATAWAL宽度),ADDRIGH宽度(ADDRIGH宽度))
第二章:DATAXOUTY-TMP(DATAXOUTURTMP)
第二类:
第二类:
写的,写的,
第二类:
第二章;

“永远”@(PaseEk CLK)
一开始
第二个数据;
γ-端

终端模块

上述修改后的代码具有跨不同层次的O/P数据流水线级。

这个结构现在推断出一个最佳的块RAM。

这个问题应该固定在ViVADO综合的未来版本中。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 17:53:38 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它