时间: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