描述
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综合的未来版本中。
没有回复内容