63I/62I/61I/5.2I/5.1i UNISIM,SIMPREM,仿真块RAM(设置)在CKA上关于CLKB(地址冲突)的存储器冲突违反

描述

关键字:RTL、RAMB4、RAMB16、违反、尊敬、Verilog、VHDL、BRAM、块RAM

当运行RTL仿真时,双端口块RAM发生以下类型的错误:

ISI.62i和更高的消息

对于VHDL和Verilog
“RAMB16S3636S36内存冲突错误:lt;StaseNo.No.gt;
在RAM的端口A和Port B同时请求写入相同的地址。在端口A的地址位置&地址> gt;(HEX)和端口B的地址位置&地址(gx;(HEX))写入RAM的内容是未知的。

ISE中的消息在62I之前发布

Verilog
“定时违反错误:在仿真时间α时,设置时间为违反RAMB实例和LT;StimeNyNo.Gt..DistPrime0在ClKB端口上的仿真时间。预计安装时间为100。

VHDL语言
“* * *警告:*/RAMB在CKA上对CKKB设置高度违反;
期望值:=0.1纳秒;观察到:=αns;AT:α-ns
时间:πππ迭代:1实例:<

当我在一个端口上写入一个地址并从另一个端口上的地址读取时,就会发生这些违规行为。这是一个违规,因为读取端口上读取的数据无效。在硬件中,读取的值可能是旧数据、新数据或旧与新的组合。在仿真中,输出是“x”,因为读取的值是未知的。欲了解更多信息,请参阅ViTEX II平台FPGA用户指南:
HTTP://www. xLimx.COM/XLNX/XWeb/XILIPu外宣SyDePas.jSP?SGulalNavPox&=;SdiaLaNavaPoice=&类别=-1209831和iLangaGID=1

进入设计考虑-&块;StEICAM存储器-冲突解决。

解决方案

你应该尽可能避免碰撞。当一个地址写入一个端口时,您的设计不应该允许从另一个端口上的相同地址读取。然而,在某些应用中,这是不能避免的。只要在设计中不使用第二个端口上读取的值,就可以安全地忽略这些违规行为。

注意:对于IS7.7.1i和更高,请参阅(赛灵思解答21239).

VHDL工作

注意:仿真中的碰撞警告是有效的!只有当您确信可以安全地忽略警告时,才应禁用冲突检查。只有当您不使用在发生违规时读取的数据时,才可以忽略这些警告。例如,在FIFO应用程序中,读取端口总是由于时序原因而启用,每当FIFO为空且写入数据时,就会发生违规。在这种情况下,违反是有效的,但是在设计中不使用读取的值,因此可以忽略该违反。使用下面的方法来处理类似的情况:

1。将配置语句添加到TestBoobe中,将块RAM模型中的设置更改为“0”,如下面的示例所示:

实例配置语句

测试平台的配置MyICONFIG
为行为
UUT:顶部
为行为
对于RAM1,RAM2,RAM3:RAMB4S1S1使用实体UNISIM.RAMB4S1S1
通用映射(StuuPuthALL=& 0 ns);
结束;
结束;
结束;
结束;
结束MyIn配置;

此配置语句将设置时间设置为RAM1、RAM2和RAM3实例的“0”。所有其他BRAM在设计中仍有安装时间,并将标记碰撞警告。这三个RAM不再标记碰撞警告。

2。根据设计层次结构和设计中的实体、体系结构和实例名称更改配置语句。一般格式如下:

TestStand &;;
TestStand & GT中的架构名称;
在TestStudio&Gt中给予顶层的实例名称:顶层实体名称& GT;
顶级建筑名称;
对于下一级层次结构的实例名>:lt;层次结构的下一级的实体名称>
层次结构下一级的体系结构名称& GT;


对于和BLAM实例名称><bram实例名>& BLAM模型名称& Gt;使用实体UNISIM.&;BRAM模型名称& GT;
通用映射(StuuPuthALL=& 0 ns);
结束;


结束;
结束;
结束;
配置名称;

三。在加载设计时,必须加载TestBead中的配置语句,而不是架构。

Verilog工作
如果您确信碰撞违规可以被安全地忽略,那么您可以通过禁用在选定的块RAM上的碰撞警告来解决这个问题,如下所述。

ISE 61I方法论

表演下列内容:
-编译您正在使用的单个RAM模型,并定义Dabable SurrimyOnCurror。
-设置一个配置选项,以便COMPXILB将禁用对其编译的RAM模型的冲突检查。为仿真器使用适当的方法如下:

MTI
命令行:VLog+Deal+Deable
- COMPXLIB的COMPXIL.CFG:选项:MTiSeS:Verilog:-源- 93 +定义+ Deable

风险投资公司
命令行:VCS+定义+ DISABLE
-COMPXLIB的COMPXIL.CFG:选项:VCS:Verilog:-MUpUp++定义+ DeabeLySurrimyOnChina

数控仿真
-命令行:NCVLoop-定义Dababy-ReavyIn检查
命令行:NCVILIOG++定义+ DISABLE
-COMPXLIB的COMPXIL.CFG:选项:NCSIM:Verilog:-消息-nOLog -定义Dababy-ReavyIn检查

您可以访问位于“综合”和“验证”设计中的“COMPXLIB .CFG”文件的信息:
HTTP://www. xLimx.COM/Spurp/SWIMANALS/XILIX6/DIXX.HTM

ISI.61I之前的方法论

将分配语句添加到测试台,如下所示。

例子

初始开始

分配Uut.RAMi St.DATAY冲突=0;
分配Uut.RAMi St.MeMyYyBuffic=0;
分配Uut.RAMI.St.DATAYCurrimixAyb=0;
分配Uut.RAMIN。
分配Uut.RAMI.St.DATAYCROSENIONBYA=0;
分配Uut.RAMIN StUnyYORACIONIONBYA=0;
分配Uut.RAMi St. AdvrsSReulyNyAAB=0;
分配UUT.RAMIN STATEADESRSSYCROSENIONBYA=0;
分配Uut.RAMi St.AddiSsx碰撞=0;

结束

这就禁用了RAMMIN块RAM实例上的时钟之间的安装冲突。设计中的所有其他块RAM保留时钟之间的设置检查。(必须根据设计的层次结构更改“Uut.RAMixNST”。为了实现这一变化,从TestBooad开始,使用实例名称:St..n..n.l.lt;Reg >

RAMMyNST应该匹配顶级文件中RAMB实例化的名称。

此更改仍将产生消息,但块RAM的输出将不再是XS。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 15:01:31 +0800

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

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