描述
关键字:ViTEX、VITEX-E、块、BRAM、RAM、BrimsSpura、FIFO、BrimsH-Purb、约束
紧迫性:标准
一般描述:
在发布3.1i软件之前,推送到或进入双端口ViTEX块RAM的TNM或TNMyNET属性将导致该块RAM实例被添加到TNM组。因此,块RAM的两个端口(BELS)将属于该组。TnM组的前向跟踪总是标记实例,而不考虑TnM属性跟踪的输入PIN。
这种情况使得很难指定双端口块RAM的定时,在该端口上两个端口以不同的频率被访问。为了允许在使用不同时钟频率的双端口RAM上指定单独的时间组,在3.1i软件中添加了两个新的TimeScript关键字:BrimsSpura和BrimsSpulb。
这个答案记录讨论了这两个关键字的用法,以及使用这两个属性的可能的副作用。
注意:在版本4.1中,对双端口RAM正确地分析了TNM特性。对于4.1 UCF示例,请参见(赛灵思解答12852).
解决方案
一
可以在UCF或NCF文件中输入BrassxPoTa和BrasssiPoTB属性。下面的例子说明了它们是如何使用的。
1。净“X”TNMNET= BRAMSH PORTA群;
TNM组“GyPa”将包含所有由X驱动的端口。如果Net X被跟踪到任何B端口输入,任何单端口块RAM元件,或者任何选择RAM元件,这些都不会成为GARPA成员。
2。NET“X”TNMYNET= BRAMSH PORTB(DOB*)组PB;
TNM组“Gull PB”将包含由B X驱动的每个B端口,如果该B端口上的至少一个输出驱动与模式“DOB*”匹配的信号。
三。“Y”型TNM=BRAMSB PORTB GROPC;
TNM组“GyPPC”将包含在实例Y中发现的所有B端口。如果实例Y本身是双端口块RAM原语,那么GyPc将包含该实例的B端口。
4。“Y”TNM=BRAMSH PORTA(DOA*)组;
TNM组“GROPPD”将包含每个在Y实例下找到的端口,如果端口上的至少一个输出驱动与模式“DOA*”相匹配的信号。
5。TimeGRP集团;
用户组“Gype”将包含所有双端口块RAM元件在设计中的A端口。请注意,这相当于BrimsSpura(*)。
6。TimeGRP组=BrAMSH PORTB(MEM/DOB*);
用户组“GROPF”将包含设计驱动模式匹配“MEM/DOB*”的所有B端口。
7。TimeStTS01 =从BrimsSpura到BrimsH-Purb(DOB*);
规范“TS01”将控制在任何端口开始并在B端口结束的路径,驱动与模式“DOB*”匹配的信号。
使用这些属性时应注意以下附加点:
1。BrimsSpura和BrassH-Purb关键字仅适用于ViTeX和相关架构中的双端口块RAM。它们不适用于单端口块RAM,也不适用于任何体系结构中的双端口选择RAM。对于这些其他类型的RAM元件,您应该使用RAM关键字。
2。约束编辑器当前不支持这两个新关键字。约束必须在UCF或NCF约束文件中输入。
三。使用新关键字之一定义的模式组可以包含作为基于RAM的模式组的成员的元件。例如:
TimeGRP AlsRAMRAM= RAM;
TimeGRP AlpAppalts=BrassSpura;
在这个示例中,所有双端口块RAM元件的A端口将是组ALLYRAM和组ALLYAPORTS的成员。
4。重要的是:端口必须驱动输出,由BRAMSH端口分组定义。如果输出端口没有连接,当设计由NGDBug解析时,BRAMSH端口组将从所有适用的约束中移除。
二
使用这些属性可能带来的副作用
1。如果双端口块RAM由两个时钟控制,即CLKA和CLKB,并且对于CKA和CLKB有两个独立的周期约束,TrCE将根据UCF或NCF文件中出现的周期约束的顺序来报告TWR文件中的块RAM路径。
例如,如果UCF文件具有以下条目:
净克拉期=20纳秒;
净CLKB周期=15纳秒;
BLAMRAM路径只会出现在CKKB周期规范下的.TWR文件中。
为了解决这个问题并确保在适当的TimeScript下出现块RAM路径,可以使用BrimsxPoTa和BrassH-Purb属性对块RAM进行分组。例如,可以使用以下语法对块RAM和FFS进行分组:
网群;
Net CKA TNMYNET= FFS GROPA;
Net CLKB TNMYNET= BRAMSB PORTB组;
Net CLKB TNMYNET= FFS组PB;
TimeStS001=周期群20nS;
TimeStTs02=周期组15NS;
三
使用这两个属性可能带来的副作用(续):
2。如果设计包含共享双端口块RAM的时钟之一的LUT RAM,则没有办法将不适当的块RAM端口保持在RAM组之外。
例如,如果下面的时间GRP在约束文件中:
net CKA TNMYNET= RAMS ALLYRAM;
它不仅会拉进所有的公羊,也会拉进两个街区的港口。这是因为BrassH-Posix群是更广泛的RAMS群的子集。
因此,在涉及LUT RAM的情况下,唯一的工作是定义用户时间组并在约束文件中使用除子句。如果在设计中使用了CKDLL,则需要使用CLKDLL输出中的所有网络来指定这些时间组。这是因为用户定义的时间组名称目前无法通过CLKDLL来推送。
下面是在约束文件中使用一个除子句来对同一时间GRP中的双端口块RAM的LUT RAM、FFS和端口A进行分组:
NET“CLKA”TNMYNET=“FFS:Calka-nuluTrAMs”;
NET“CKA”TNMYNET=“BrimsSpura:Calka-nuluTrAMs”;
NET“CLKA”TNMYNET=“RAM: CKAKALALLAM”;
TimeGRP“Calka LutrAMs”=“CalkaAlelas,除了BrimssPura BrasspPurb”;
TimeGRP“CKA”=“CalkaNoultRAMs CKKAL LUTRAMS”;
没有回复内容