当前位置:首页 > 新闻资讯 > FPGA之家动态 >

Lattice_FPGA开发高级应用

时间:2026-03-24      来源:FPGA_UCY 关于我们 0

13)设计中遇到困难的解决策略

13.1不能适配

映射失败,不能适配至器件

-IO的总数超过限制

》修改设计,减少IO的数目

》改成较大的封装

-PFU(SLICE/FSLICE)的总数超过限制

》小于20%,做以下尝试

综合::FanoutLimit=99999(infinity),Frequency=1MHz,Area=True,syn_useioff=1(利用

IO的寄存器)

映射:用最紧凑形式,即PackLogicBlockUtil.=0

如果使用许多分布式RAM,而有许多EBR可用的话,用EBR取代RAM,这样也许能使设计适

配。

》其它

优化设计减少逻辑

改成较大的器件

布局失败,未能找到合适的布局

-特别类型IO的数目超过限制(pre-placement出错)

》修改设计,使用不同类型的IO

》改成较大的封装

-如果由于IO布局失败(pre-placement出错)

》从preference除去所有IOLOCATEs/PROHIBITs/PGROUPs,再试。

》有许多边沿时钟?如果可能的话将它们合并。

》有太多的IO类型?减少IO类型。

-由于核逻辑的失败,即SLICE/FSLICE(在Phase0出错)

》在*.prf存在大的GROUP?除去它,再试。

》在*.prf存在任何象限时钟存?除去它,再试。

》任何LOCATEs/PROHIBITs在PFU处?除去它,再试。

13.2.布线失败

布线失败是与时钟相关的网络?

很可能是由于PIO/PLL/DLL/CLKDIV上的时钟驱动器和主/边沿时钟源之间未能对准所致。

-检查数据表,确认时钟驱动器处于恰当的位置(如果这个设计中没有逻辑,IO支持流程不能够定位时

钟驱动器至恰当的位置。

-把设计载入Epic,找到未能布线的网络和冲突的网络,如果可能,调整PLL/DLL/CLKDIV位置,以解

决冲突。

数据路径上未能布线很可能是由于拥挤所引起

-综合

》ForceGSR=True

》检查fanout限制,FanoutLimit=100

–Map

》尝试松散形式,即PackLogicBlockUtil.=100

–PAR

》尝试拥挤驱动布局和布线(CDP+CDR)

CongestionDrivenPlacement=True,RoutingMethod=Default,CongestionDrivenRouting=True

》尝试拥挤驱动布局和布线与基于布线器的流通

CongestionDrivenPlacement=True,RoutingMethod=NBR

》尝试低PAR努力,即.PlacerEffortLevel=3

什么时候应该打开拥挤驱动?

(特别针对ECP2/M器件)

-如果是大器件,打开CDP

》对50K和slice利用率>70%,打开CDP。

》对70K以上的器件,始终打开CDP。

-如果CDP处于打开,始终使用CDR或者NBR

-对小的ECP2/M器件,尝试关闭CDP,然后读par文件

》比较布局时间和总时间

》如果总时间的布局时间

如果总时间的布局时间

》首次迭代后,如果未布线连接>5,打开CDP。

13.3时序错误

不能满足时序约束

-综合

》检查设置,确认设置了合适的频率。

》尝试Pipelining和Retiming,或者只是Pipelining

–Map

》尝试RegisterRetiming

–PAR

》确认PlacementEffortLevel为高,即5。

》设置15~20%时序约束

》运行multipar,也许有10~20%变化

-时钟提升

》对SC/M平均来说,会改进Fmax12~15%。

》ClockBoostingMode=基本时钟提升,或者最大频率

仍然不能满足时序?

现在必须通过跟踪报告(*.twr)和GUI工具研究故障路径(DesignPlanner,EPIC)

-如果关键路径在IO和核心逻辑之间,寄存器IO或通过DIN/DOUT参数把寄存器包入IO。

-如果关键路径的连接太远,PGROUP能有所帮助吗?

特别是PFU和EBR/DSP之间。

-如果连接距离是可以的,但布线延时很长,那么将是拥挤问题。尝试CDP、CDR和NBR。

-时钟有大的偏移?

》定义时钟为主/象限时钟,以减少偏移。

-含EBR?EBR输出是寄存器?差别是1.6~2.6ns(取决哪个系列和速度等

级)

-很长的逻辑级?设计可以是流水线吗?

-如果可接受的话,改成较高的速度等级。

-通过多周期缓解时钟传送约束。

-阻断内部时钟域

如何解决违反保持时间?

-在进行par时,打开AutoHold-TimeCorrection。

-对SC/M,时钟提升也可以修整违反保持时间。

》ClockBoostingMode=保持时间纠正

14)Active-HDL使用方法

Active-HDL是用于VHDL、Verilog/SystemVerilog、EDIF和SystemC设计开发的集成环境。用它可以对

VHDL、Verilog或者VHDL和Verilog混合设计进行仿真。这一节主要介绍两种仿真的方法:1.使用GUI

的方法;2.从已有的Modelsim移植至Active-HDL的方法。

14.1使用GUI的方法

首先打开Active-HDL。在file菜单下选New,再点击Workspace。将exampl输入至workspacename

栏。

按OK出现下面图形。建立EmptyDesign,再按Next。

设置供应商,并选择器件。

输入design name。按Next,Finish 按钮。

此时的目录结构如下:

将含有设计文件和测试向量文件的两个目录source 和testbench 复制到ahdl_eg 目录下。Souce 目录中有4

个设计源文件。Testbench 中有1 个测试向量文件。

点击下图左面窗口中的Add New Fiel,加入4 个设计源文件和1 个测试向量文件。这是一个混合设计。其

中3 个为verilog 设计文件,一个为VHDL设计文件。可在下图中左面的窗口中清楚地看到。

选中ahdl_eg,按右键,点击Compile All 进行编译。

在simulation 菜单下选initialize Simulation。

出现如下对话框。

按OK。

选中测试向量文件tmds_tb,然后按右键,再按OK。点中tmds_tb 出现如下界面。

10

在Name 栏中选中信号,再按右键。选Add to Waveform。

然后在Simulation 菜单中选RUN,即出现仿真波形。

14.2 从已有的Modelsim移植至Active-HDL的方法

1. 打开Active-HDL。

2. 建立 Empty Design。

3. 设置供应商和器件。

4. 输入design name,然后按next,再按finish。

5. 如果用户已经用Modelsim做过仿真。复制包含源文件的Modelsim目录到新的AHDL项目位

置,在“AHDL_mixed_example“下。原来的Modelsim目录有“modelsim、source 和testbench”

目录。“modelsim”含有运行modelsim的 tcl 或者do 文件的仿真脚本。“source”和“testbench”

分别含有Verilog 或VHDL文件和testbench 文件。

11

6. 修改Modelsim仿真脚本“fsim.tcl”,并建立新的AHDL脚本“ahdl_fsim.tcl”。注意:Modelsim

和AHDL的脚本类似。

对于没有用SERDES 的设计,修改脚本很简单,只要比较示例文件。例如,Modelsim

使用“vsim”命令,而AHDL使用”asim”命令。

对于使用了SERDES 和PCS 的设计,使用含有do 文件用于Modelsim和AHDL的

SONET 参考设计。需要适当地改变库名字和路径。关于更加详细的情况,参见AHDL

在线帮助的移植指令。

7. 在AHDL的Tools 中执行这个脚本(macro)“ahdl_fsim.tcl”运行仿真,应该如下图所示。

12

8.对于波形结果,则与Modelsim不同。Modelsim可以在仿真(simulation)和恢复仿真之间被中断。

因此,最好等待,直到完成运行脚本后仿真,然后观察波形结果。

13

9.注意:

从Modelsim修改do 文件,或者tcl 脚本至Active HDL时,会改变某些库名字。移植FPGA设计,诸

如用SERDES 和PCS 的SC器件,这些库名应改成为Active HDL模型。

例如:

“pcsa_mti_work 应改成 “pcsa_aldec_work”

“sc_vlg” 应改成 “ovi_sc”

更重要的是,用Active HDL和SERDES/PCS 时,auto configuration *.txt 文件(系统总线,或者

pcs.txt)要移至SRC目录,而不像Modelsim文件结构(通常在simulation local directory)。

15) 引导流程与多核支持

15.1 引导流程

针对MAP 和PAR,在7.1 软件中支持引导流程。

为何要对MAP 或PAR进行引导?

-假设通过正常流程对设计进行处理。然后需要对你的设计做一些较小的改变。

-你不要完全的再次运行设计,因为在调试方面已经近乎完成,并满意设计的布局和互连。

-因此要使用引导流程,处理对设计做出的改变,但使设计的其余部分不受影响。

14

引导流程– MAP

引导MAP

-在Project Navigator 右击MAP 并选择properties。

-为了使用MAP,指定NCD引导文件。

如何引导MAP 工作

-引导映射过程始于将修改的设计与引导文件相比。与引导文件相比较,MAP 确定改变的部分,于是只

处理改变的部分。设计的其余部分与引导文件的映射相匹配。

-运行引导映射后,在project 目录会产生指导报告(xxxx_map.gpr)文件。GPR报告文件提供guided

mapping 与指导文件相匹配成功的详细情况。

引导PAR

-在Project Navigator 右击PAR并选择properties。

-为了使用PAR,指定NCD引导文件。

-指定匹配因子。默认为100%。意为在引导文件里,只有网表100%匹配才

进行引导。

-指定报告匹配。用引导元件更新报告文件。

如何引导PAR工作

-PAR比较了每个文件的对象之后,根据引导文件中PAR的信息,对更新的NCD文件的每个对象进行

PAR。对一个元件,如果PAR未能找到引导对象,根据连通性,PAR将试图找到一个。

-运行引导PAR后,在project 目录会产生引导报告(xxxx.gpr)文件。GPR报告文件提供引导映射与引导

文件相匹配成功的详细情况。

15

引导流程-报告文件

下面是指导文件报告。此例子中,在输出添加了一个非门。结果引导了78 个信号中的46 个。

引导流程-注释

例如加一个寄存器到设计,会引起时钟网络改变。在HDL 中这种小的改动不会引起引导。

由于结构限制,对LatticeECP, LatticeECP2/M, LatticeECP3, LatticeXP, LatticeXP2, 和

MachXO系列器件,主/二级时钟网络和一些高输出控制(CE/LSR)不能被引导。

16

引导流程-示例

打开ispLEVER例子

C:\ispTOOLS\examples\fpga\LatticeECP2\vhdl\prep1

通过PAR运行设计

命名prep1_map.ncd 为prep1_map_guide.ncd。用这个作为MAP 引导文件。

命名prep1.ncd 为prep1_guide.ncd。用这个作为PAR引导文件。

在VHDL 中修改q


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言