vivado 布线时间怎么显示布线延时,在floorplanning上?

> > > Vivado设计套件的UltraFast设计方法指南
Vivado设计套件的UltraFast设计方法指南
已有 454926个资源
TI最新应用解决方案
上传者其他资源
FPGA/CPLD热门资源
本周本月全部
资源大小:7.55MB
上 传 者: ()
上传日期:
资源类型:应用文档
资源积分:1分
下载次数:3
参与讨论:
标&&&&签:
分&&&&享:
Vivado设计套件的UltraFast设计方法指南
大学堂最新课程
请选择理由
若举报审核通过,可奖励2下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源分类不正确
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
* 详细原因:
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_.cn 或通过站内短信息或QQ:联系管理员 高进,我们会尽快处理。This post was written by
on October 13, 2014
Posted Under: ,
These are a few jots about constraining in Vivado. With no particular common topic, and in no particular order. Note that I have
on similar topics.
Setting the default IOSTANDARD for all ports
In a design where all ports have the same IOSTANDARD, it’s daunting to set them for all. So if there’s just one exception, one can go
set_property IOSTANDARD LVCMOS33 [get_ports -filter { LOC =~ IOB_* } ]
set_property IOSTANDARD LVDS_25 [get_ports clk_100_p]
It’s important to do this after placement constraints of the ports, because the LOC property is set only in conjunction with setting package_pin. Filtering based upon LOC is required to avoid inclusion of MGT ports in the get_ports command, and in turn fail the set_property command altogether (yielding not only a critical warning, but none of the IOSTANDARDs will be set).
Tell the truth about your heat sink
Vivado makes an estimation of the junction temperature, based upon its power estimation. That’s the figure that you want to keep below 85°C (if you’re using a commercial temperature version of the FPGA).
With all my reservations on the accuracy of the power estimation, and hence the temperature it calculates based upon in, it makes sense to tell Vivado about the chosen cooling solution. Otherwise, it assumes a heatsink with a healthy fan above it. So if you like to live on the edge, like me, and work without a noisy fan, these two lines in the XDC file tell Vivado to adjust the effective Junction-to-Air thermal resistance (Θ_JA).
set_operating_conditions -airflow 0
set_operating_conditions -heatsink low
It’s also possible to set Θ_JA explicitly with -thetaja. Try “help set_operating_conditions” at the Tcl prompt for a list of options.
Frankly speaking, the predicted junction temperature stated on the power report is probably rubbish anyhow, even if the power estimation is accurate. The reason is that there’s a low thermal resistance towards the board: If the board remains on 25°C, the junction temperature will be lower than predicted. On the other hand, if the board heats up from adjacent components, a higher temperature will be measured. In a way, the FPGA will serve as a cooling path from the board to air. With extra power flowing through this path, the temperature rises all along it.
For example, the temperature , with the fan taken off, was significantly higher (~60°C) than Vivado’s prediction (44°C) on a design that had little uncertainty (90% of the estimated power was covered by static power and GTXs with a fixed rate — there was almost no logic in the design). The junction temperature was measured through JTAG from the Hardware Manager.
So the only thing that really counts is a junction temperature after 15 minutes or so.
Search patterns for finding elements
Pattern-matching in Vivado is slash-sensitive. e.g.
[get_pins "*/*/a*"] { puts $x }
prints elements pins three hierarchies
down beginning with “a”, but “a*” matches only pins on the top level.
The “foreach” is given here to demonstrate loops. It’s actually easier to go
join [get_pins "*/*/a*"] "\n"
To make “*” match any character “/” included, it’s possible, yet not such a good idea, to use UCF-style, e.g.
foreach x [get_pins -match_style ucf "*/fifo*"] { puts $x }
relevant example
get_pins -match_style ucf */PS7_i/FCLKCLK[1]
The better way is to forget about the old UCF file format. The Vivado way to allow “*” to match any character, including a slash, is filters:
set_property LOC GTXE2_CHANNEL_X0Y8 [get_cells -hier -filter {name=~*/gt0_mygtx_i/gtxe2_i}]
Another important concept in Vivado is the “-of” flag which allows to find all nets connected to a cell, all cells connected to a net etc.
For example,
get_nets -of [get_cells -hier -filter {name=~*/gt_top_i/phy_rdy_n_int_reg}]
Group clocks instead of a lot of false paths
Unlike ISE, Vivado assumes that all clocks are “related” — if two clocks come from sources, which the tools have no reason to assume a common source for, ISE will consider all paths between the clock domains as false paths. Vivado, on the other hand, will assume that these paths are real, and probably end up with an extreme constraint, take ages in the attempt to meet timing, and then fail the timing, of course.
Even in reference designs, this is handled by issuing false paths between each pair of unrelated clocks (two false path statements for each pair, usually). This is messy, often with complicated expressions appearing twice. And a lot of issues every time a new clock is introduced.
The clean way is to group the clocks. Each group contains all clocks that are considered related. Paths inside a group are constrained. Paths between groups are false. Simple and intuitive.
set_clock_groups -asynchronous \
-group [list \
[get_clocks -include_generated_clocks -of_objects [get_pins -hier -filter {name=~*gt0_mygtx_i*gtxe2_i*TXOUTCLK}]] \
[get_clocks -include_generated_clocks "gt0_txusrclk_i"]] \
-group [get_clocks -include_generated_clocks "drpclk_in_i"] \
-group [list \
[get_clocks -include_generated_clocks "sys_clk"] \
[get_clocks -include_generated_clocks -of_objects [get_pins -hier -filter {name=~*/pipe_clock/pipe_clock/mmcm_i/*}]]]
In the example above, three clock groups are declared.
As a group often consists of several clocks, each requiring a tangled expression to pin down, it may come handy to define a list of clocks, with the “list” TCL statement, as shown above.
Another thing to note is that clocks can be obtained as all clocks connected to a certain MMCM or PLL, as shown above, with -of_objects. To keep the definitions short, it’s possible to use create_generated_clock to name clocks that can be found in certain parts of the design (create_clock is applied to external pins only).
If a clock is accidentally not included in this statement, don’t worry: Vivado will assume valid paths for all clock domain crossings involving it, and it will probably take a place of honor in the timing report.
Telling the tools what the BUFGCE/BUFGMUX is set to
Suppose a segment like this:
BUFGCE clkout1_buf
(slow_clk),
(seq_reg1[7]),
(clkout1));
To tell the tools that the timing analysis should be made with the assumption that BUFGCE is enabled,
set_case_analysis 1 [get_pins -hier -filter {name=~*/clkout1_buf/CE0}]
set_case_analysis 1 [get_pins -hier -filter {name=~*/clkout1_buf/S0}]
The truth is that it’s redundant in this case, as the tools assume that CE=1. But this is the syntax anyhow.
Constant clock? Who? Where? Why?
One of the things to verify before being happy with a design’s timing (a.k.a. “signing off timing”), according to UG906 (Design Analysis and Closure Techniques) is that there are no constant clocks nor unconstrained internal endpoints. But hey, what if there are? Like, when running “Report Timing Summary”, under “Check Timing” the number for “constant clock” is far from zero. And the timing summary says this:
2. checking constant clock
--------------------------
There are 2574 register/latch pins with constant_clock. (MEDIUM)
3. checking pulse_width_clock
-----------------------------
There are 0 register/latch pins which need pulse_width check
4. checking unconstrained_internal_endpoints
--------------------------------------------
There are 0 pins that are not constrained for maximum delay.
There are 5824 pins that are not constrained for maximum delay due to constant clock. (MEDIUM)
Ehm. So which clock caused this, and what are the endpoints involved? It’s actually simple to get that information. Just go
check_timing -verbose -file my_timing_report.txt
on the Tcl prompt, and read the file. The registers and endpoints are listed in the output file.
Floorplanning (placement constraints for logic)
The name of the game is Pblocks. Didn’t dive much into the semantics, but used the GUI’s Tools & Floorplanning menus to create a Pblock and auto-place it. Then saved the constraints, and manipulated the Tcl commands manually (i.e. the get_cells command and the choice of slices).
create_pblock pblock_registers_ins
add_cells_to_pblock [get_pblocks pblock_registers_ins] [get_cells -quiet -hierarchical -filter { NAME =~
"registers_ins/*" && PRIMITIVE_TYPE =~ FLOP_LATCH.*.* && NAME !~
"registers_ins/fifo_*" }]
resize_pblock [get_pblocks pblock_registers_ins] -add {SLICE_X0Y0:SLICE_X151Y99}
The snippet above places all flip-flops (that is, registers) of a certain module, except for those belonging to a couple of submodules (excluded by the second NAME filter) to the bottom area of a 7V330T. The constraint is non-exclusive (other logic is allowed in the region as well).
The desired slice region was found by hovering with the mouse over a zoomed in chip view of an implemented design.
The tools obeyed this constraint strictly, even with post-route optimization, so it’s important not to shoot yourself in the foot when using this for timing improvement (in my case it worked).
To see how the logic is spread out, use the “highlight leaf cells” option when right-clicking a hierarchy in the netlist view to the left of a chip view. Or even better, use Tcl commands on the console:
unhighlight_objects
highlight_objects -color red [get_cells -hierarchical -filter { NAME =~
"registers_ins/*" && PRIMITIVE_TYPE =~ FLOP_LATCH.*.* && NAME !~
"registers_ins/fifo_*" }]
The first command removes existing highlight. There’s an -rgb flag too for selecting the exact color.
There’s also show_objects -name mysearch [ get_cells ... ] which is how the GUI’s “find” operation creates those lists in GUI to inspect elements.
required, will not be published
Website address
optional, your blog address
Previose Post:当前位置: >>
ASIC设计-FPGA原型验证
Goke MicroelectronicsASIC 设计-FPGA 原型验证版本 1.0 1.1修改内容修改人时间 4.09ASIC Design TeamI ASIC 设计-FPGA 原型验证目录1 ASIC 验证技术 ...................................................................................................... 1 1.1 ASIC 设计流程 ............................................... 1 1.2 FPGA 验证技术 ............................................... 3 1.3 Altera 与 Xilinx 工具对比 .................................... 3 1.4 VHDL 与 Verilog 对比 ......................................... 5 1.5 Verilog 良好编程习惯 ........................................ 6 2 基于 ALTERA 的 ASIC 验证 ................................................................................. 9 2.1 Stratix IV FPGA 资源与架构 .................................. 9 2.2 QuartusII 设计工具 ......................................... 10 2.3 ASIC 设计转换 .............................................. 11 2.3.1 PLL 设计 ............................................................................................ 11 2.3.1 RAM 设计 .......................................................................................... 16 2.4 时序约束................................................... 19 2.4.1 QSF&Tcl ............................................................................................. 22 2.4.2 LogicLock ........................................................................................... 23 2.5 综合布局布线............................................... 23 2.5.1 综合设置............................................................................................. 24 2.5.2 增量编译............................................................................................. 25 2.5.3 VQM & QXP ...................................................................................... 30 2.5.4 时序分析............................................................................................ 30 2.6 下载设计文件............................................... 32 2.7 Debug...................................................... 32 2.7.1 In-System Memory Content Editor ..................................................... 33 2.7.2 ChipPlanner......................................................................................... 34 2.7.3 SignalTapII .......................................................................................... 38 2.7.4 Keep Signals ....................................................................................... 43 2.8 Example 工程 ............................................... 45 3 基于 XILINX 的 ASIC 验证 ................................................................................. 49 3.1 Vertex-7 FPGA 资源与架构 ................................... 49 3.2 设计工具 ISE 与 Vivado ...................................... 49 3.3 ASIC 设计转换 .............................................. 54 3.3.1 时钟资源............................................................................................ 54 3.3.2 PLL 设计 ............................................................................................ 58 3.3.3 RAM 设计 .......................................................................................... 61II Goke Microelectronics3.4 时序约束................................................... 64 3.5 综合布局布线............................................... 70 3.5.1 Blackbox ............................................................................................. 70 3.5.2 Keep Signals ....................................................................................... 71 3.5.3 Strategies ............................................................................................. 72 3.5.4 Incremental Compile ........................................................................... 75 3.5.5 时序分析............................................................................................ 77 3.5.6 Generate Bitstream.............................................................................. 81 3.6 下载设计文件............................................... 84 3.6.1 下载 bit 文件 ..................................................................................... 84 3.6.2 下载 mcs 文件 ................................................................................... 87 3.7 Debug...................................................... 88 3.8 Example 工程 ............................................... 94 3.8.1 导入 ISE & Synplify 工程 ................................................................. 94 3.8.2 Working with Tcl ................................................................................. 95 3.9 Gate Clock 处理 ............................................ 99 3.10 多片 FPGA 验证 ............................................ 101 4 DDR 相关技术 .................................................................................................... 104 4.1 DDR Controller............................................ 108 4.2 DDR PHY................................................... 111 4.2.1 Altera PHY ........................................................................................ 111 4.2.2 Xilinx PHY ....................................................................................... 113 5 硬件技术.............................................................................................................. 117 5.1 PCB 设计注意事项 .......................................... 117 5.2 电磁兼容与信号完整性...................................... 117 5.2.1 端接匹配.......................................................................................... 118 5.2.2 防止地弹.......................................................................................... 118 5.2.3 减小串扰.......................................................................................... 118 5.2.4 降低电磁干扰.................................................................................. 119 5.3 FPGA 开发板使用注意事项 ................................... 120 总结............................................................................................................................ 121III Goke Microelectronics1 ASIC 验证技术1.1 ASIC 设计流程ASIC 分为全定制和半定制。全定制设计需要设计者完成所有电路的设计, 因此需要大量人力物力,灵活性好但开发效率低下。如果设计较为理想,全定制 能够比半定制的 ASIC 芯片运行速度更快。半定制使用库里的标准逻辑单元 (Standard Cell),设计时可以从标准逻辑单元库中选择 SSI、MSI、数据通路、存 储器甚至系统级模块(如乘法器、 微控制器等)和 IP 核, 这些逻辑单元已经布局完 毕,而且设计得较为可靠,设计者可以较方便地完成系统设计。现代 ASIC 常包 含处理器,类似 ROM、RAM、EEPROM、Flash 的存储单元和其他模块. 这样的 ASIC 常被称为 SoC(片上系统)。 由于 SoC 设计复杂度不断增加,使得缩短面市时间的压力越来越重。虽然充 分利用 IP 核大大减少了 SoC 的设计时间,但 SoC 验证仍然非常复杂耗时。 SoC 和 ASIC 的最大不同之处在于它的系统特性,除了大量硬件模块之外,SoC 还需要 大量的固件和软件,如操作系统、驱动程序、通讯协议以及应用程序 等。这使得 传统的软件仿真工具已经无法完全解决验证的问题。 而且随着越来越多的需要处 理大量实时数据的应用(如视频)出现,验证技术就要求能够在接近实时频率的 条件下进行验证。现在越来越多的 ASIC 设计者自己设计 FPGA 验证板来进行 ASIC 设计验证。用 FPGA 验证 ASIC 的好处是可以使软件的开发调试和 ASIC 的开发调试并行的进行。 图 1-1 为典型的半定制设计流程,一般用来设计数字 IC 电路。全定制的设 计,一般用于设计模拟电路和数模混合电路。 本文主要讨论设计流程中的仿真验证,RTL 仿真工具一般用到的有 Cadence 的 NC-verilog,Synopsys 的 VCS 和 Mentor 的 ModelSim。 RTL 验证包括基于 UVM 等方法学的逻辑验证和基于 FPGA 的原型验证。 基 于方法学的验证主要使用 SystemVerilog 产生可重用性好、功能覆盖率高和调试 简易的测试激励。 常见的验证平台有 UVM、 OVM 和 VMM, 都基于 SystemVerilog 搭建的。UVM 是在 OVM 和 VMM 基础上推出的验证方法学的新的标准。2006 年,Synopsys 公司推出了验证方法学手册(VMM) ,这个是 RVM 从 vera 语言过 度到 SystemVerilog 的方法学。2008 年,Cadence 公司和 Mentor 公司共同推出了 OVM。2010 年,ACCELLERA 采用了 OVM 作为基础,推出了 UVM 验证方法1 ASIC 设计-FPGA 原型验证学。 同时引入了 VMM 的一些概念, 作为业界方法学统一的一个雏形。 基于 FPGA 的原型验证,主要有基于 Altera 和 Xilinx 的 FPGA 验证平台。设计流程 需求分析 算法设计 架构设计 RTL设计 仿真验证 综合 门级验证 静态时序分析 布局布线(P&R) 寄生参数提取 版图物理验证 Tapeout 芯片测试设计工具Matlab C C++ SystemC C C++ VHDL Verilog VCS NC-Verilog ModelSim SystemVerilog UVM FPGA DesignCompiler BuildGates Formality LEC PrimeTime Pearl Astro ICC Encounter Star-RCXT Assure-RCX Calibre-xRC Hercules Dracula Calibre图 1-1 数字 IC 设计流程2 Goke Microelectronics1.2 FPGA 验证技术随着 SoC 设计规模的与日俱增,其功能日趋复杂,芯片的验证阶段占据了 整个芯片开发的大部分时间。为了缩短验证时间,在传统的仿真验证的基础上涌 现了许多新的验证手段, 如 SDV(Software Driven verification)、 BFM(Bus Function Model)等,以及基于 FPGA 的原型验证技术。因 FPGA 工艺及技术的发展,其速 度、容量和密度都大大增加,功耗和成本在不断的降低,使得基于 FPGA 的原型 验证得到广泛的应用。基于 FPGA 的原型验证可以比软件仿真速度高出 4~6 个 数量级,而且还可以提高流片成功率,并为软件开发提供了硬件平台,加速了软 件的开发速度。 FPGA 原型验证平台的硬件设计应该考虑 FPGA 的逻缉资源、应用资源、扩 展能力、PCB 信号质量、调试难度、组态和成本等方面的因素。本原型验证系 统采用的是基于 Altera 公司 Stratix IV EP4SE820 的开发板,和基于 Xilinx 公司 Vertex-7 XC7V2000T 的开发板,扩展板是根据 SoC 整体验证需求而设计的 PCB 板。 虽然 FPGA 和 ASIC 所用资源和实现方式不同, 但在进行原型设计中需要遵 循的一个原则就是“尊重原设计”。在 FPGA 现有资源情况下实现 SoC 时,尽可 能地少改动原 SoC 设计,在此基础上需要对原设计做如下转换: 1. 存储模块。存储单元是必须进行代码转换的,ASIC 中的存储单元通常用 代工厂所提供的 Memory Compiler 来定制。如果直接将 ASIC 代码中的存储单元 作为 FPGA 的输入,通常综合器是综合不出来的,即使能综合出来,也要花费很 长时间,并且资源消耗多、性能不好。而 FPGA 厂商一般提供经过验证并优化的 存储单元,因此存储单元要进行代码转换。在设计里用 FPGA 的 RAM 宏单元来 替换 ESRAM,SoC 芯片里面的 DDR PHY 是模拟的模块,此要替换成 Altera 或 Xilinx 公司的 DDR PHY 的 IP 核。 2. 时钟和门控。数字电路中,时钟是整个电路最重要、最特殊的信号。在 ASIC 中, 用布局布线工具来放置时钟树, 利用代工厂提供的 PLL 进行时钟设计。 而 FPGA 中通常已经配置一定数量的 PLL 宏单元,并有针对时钟优化的全局时 钟网络, 一般是经过 FPGA 的特定全局时钟管脚进入 FPGA 内部, 后经过全局时 钟 BUF 适配到全局时钟网络,这样的时钟网络可以保证相同的时钟沿到达芯片 内部每一个触发器的延迟时间差异可以忽略不计,因此时钟单元需要采用 FPGA 的 PLL 宏单元和专门的时钟布线资源来替换。为了减少功耗,SoC 设计中使用 了门控时钟(clockgating),对于 FPGA 来说这种门控时钟容易产生毛刺,导致数 据不正确,所以在 FPGA 设计中要使用时钟使能寄存器代替门控时钟。1.3 Altera 与 Xilinx 工具对比3 ASIC 设计-FPGA 原型验证Altera 和 Xilinx 是最大的两家 FPGA 厂商, Altera 目前的高端器件是 Stratix IV 系列,Xilinx 是 Vertex-7。在 SoC 的验证过程中,我们希望 FPGA 的频率能够达 到和 SoC 一样,但是验证过程中对于超过 400 万门的 SoC,FPGA 的最高运行频 率不超过 200M。 Altera 和 Xilinx 这两家,在高端器件,Xilinx 处于领先地位。现在 FPGA 的 规模越来越大,资源两家的高端器件都能满足一般开发验证,所以使用的瓶颈已 经在软件这个层面。从 EDA 软件来说,Altera 软件要做的好,特别是编译综合 和时序收敛方面,Xilinx 的 v7 资源占用率才 40%左右,就时序很难收敛,然后 要用 SmartXplorer 来跑多个 case,看下有没有能编译通过的,编译同样规模的工 程要比 Quartus 慢很多, 而且内存开销很大, route 一个 800 万门的 design 要占用 20G 左右的内存。毕竟对于用户来说,实现 FPGA 工程到成功编译下载的中间过 程越短越好。Xilinx 从 v7 系列开始,使用新的软件 vivado 编译工具,ISE 后面 不在出新的版本, 从这个角度也可以看出 Xilinx 自己都认为原来的 ISE 软件太差, vivado 是新的软件架构, 编译综合功能还是很差劲, 但是布局布线功能改善很大, 同样规模的 design,要比 ISE 快一倍, 内存开销少一半, 所以一般用 synplify 综合, 用 vivado 布局布线。Quartus 的集成界面易用性做得比 ISE 好,而 ISE 和 vivado 的脚本支持比 Quartus 做得好;因此对初学者来说,Quartus 更容易入门,而对熟 练用户,在大型设计项目的开发中,vivado 则会显得更顺手,因为可以对后端设 计进行更精细的控制和自动化。 关于块 RAM,Xilinx 的双口 RAM 是真的,Altera 的没有双口 RAM,如果 你要实现真正的双口 RAM,只能用两块 RAM 来背靠背地实现,这样你的 RAM 资源就少了一半,如果你的应用对片内双口 RAM 的需求很重要,用 Altera 的就 划不来。 从 RTL 仿真、编译综合、布局布线、下载调试,两家公司都开发了一系列 工具,如表 1-1 所示。 表 1-1 Altera 与 Xilinx 工具对比开发流程 Simulation Synthesis 静态时序分析 Implementation Debug 系统集成 嵌入式软核 DSP 设计 Programming Altera 工具 Quartus II Simulator Quartus II Synthesis TimeQuest Quartus II SignalTapII Qsys NiosII DSP Builder Programmer Xilinx 工具 ISim XST/vivado TimeAnalyzer ISE/vivado ChipScope/Debug EDK MicroBlaze System Generator iMPACT Matlab USB Download 第三方工具 ModelSim VCS NC-Verilog Synplify PrimeTime4 Goke Microelectronics1.4 VHDL 与 Verilog 对比Verilog HDL 和 VHDL 作为描述硬件电路设计的语言,其共同特点在于:能 形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述;可借 用高级语言的精巧结构来简化电路行为的描述; 具有电路仿真与验证机制以保证 设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无 关(有关工艺参数可通过语言提供的属性包括进去) ;易于理解和设计重用。但 是,两者又有着各自的特点: Verilog HDL 和 VHDL 最大的差别在语法上, Verilog HDL 是一种类 C 语言, 而 VHDL 是一种 ADA(Action Data Automation,行动数据自动化)语言。由于 C 语言简单易用且应用广泛, 因此也使得 Verilog HDL 语言容易学习; 相比之下, VHDL 语句较为晦涩,使用难度较大。VHDL 比较严谨,Verilog 比较自由。 在中国台湾、美国、日本等使用 Verilog 较多,而在欧洲 VHDL 发展得比较 好。国内大多数集成电路设计公司基本都采用 Verilog。Verilog 在其门级描述的 底层, 也就是晶体管开关级的描述方面比 VHDL 更强一些, 所以即使是 VHDL 的 设计环境,在底层实质上也会由 Verilog 描述的器件库所支持。Verilog 较为适合 算法级、RTL 级、门级和电路开关级的设计,而 VHDL 适合特大型的系统级设 计,也就是在系统级抽象方面比 Verilog 好。这两种语言仍处于不断完善之中, 都在朝着更高级、 更强大描述语言的方向前进。 其中, 经过 IEEE Verilog HDL 2001 标准补充之后,Verilog 的系统级描述性能和可综合性能有了大幅度提高。 学习 HDL 语言的时候有以下几点提示 1. 了解 HDL 的可综合性问题。HDL 有两种用途:系统仿真和硬件实现。如 果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的 程序 是用于硬件实现,那么我们就必须保证程序的可综合(程序的功能可以用 硬件电路实现) 。我们应该牢记一点:所有的 HDL 描述都可以用于仿真,但不是 所有的 HDL 描述都能用硬件实现。 2. 用硬件电路设计的思想来编写 HDL。学好 HDL 的关键是充分理解 HDL 语句和硬件电路的关系。编写 HDL,就是在描述一个电路,不能用纯软件的设 计思 路来编写硬件描述语言。Verilog 描述电路的时候,一定要清楚它实现的电 路,很多人只顾学习 Verilog 语言,而不熟悉它实现的电路,这是设计不出好电 路来的。 3. 语法掌握贵在精,不在多。30%的基本 HDL 语句就可以完成 95%以上的 电路设计,很多生僻的语句并不能被所有的综合软件所支持,程序移植或者更换 平台的时,容易产生兼容性问题,也不利于他人阅读和修改。 表 1-2 为 VHDL 相应的功能在 Verilog 中的实现方式,列出来方便不熟悉 VHDL 的人员理解用 VHDL 编写的 IP。 表 1-2 VHDL 与 Verilog 对比5 ASIC 设计-FPGA 原型验证功能 调用 大小写敏感 注释 模块定义 行为描述 任务 函数 并行赋值 信号定义 变量定义 条件语句 参数传递 多个实例化 常数定义 位拼接 逻辑运算符 算术运算符 位运算符 自定义数据类型VHDL use lib/package NO -entity process procedure function &= signal variable when/with select generic( ) for/if…generate constant & +-*/ (,,,) ** REM 无 type AND OR NOTVerilog `include YES // /**/ module always task function assign wire/reg reg A?B:C # (parameter) generate …for/if parameter/define {,,,} && || ! +-*/ ** % 无 & | ~VHDL 是强类型语言,对类型要求非常严,一个对象只能有一种数据类型, 而且不同类型数据间赋值是严格禁止的,Verilog 赋值灵活。 配 置 方面, VHDL 这 方面的组织比起 Verilog 显然要严密多了 ,使用 configuration,用简单的语句,就可以把不同的 architecture 实现和 entity 实现绑 定,而此时我们就能看出 VHDL 之所以要分开所谓 entity 和 architecture 的目的 所在了。 例化方面,在 VHDL 当中尝试例化一个 entity,比起 Verilog 要麻烦不少。 首先,必须在 Architecture 当中用 Component 语法来声明这个实体的 Port 和 Generic(参数) ;然后才可在后续内容当中例化实体,并且用 generic map 和 port map 来进行参数赋值和 port 连接。 在 Verilog 中若要调用其他模块里面调用 task, 先例化 task 所在的 module,如 module_name inst1, 然后使用 inst1.task1( )调用 task。 在 VHDL 里调用 Verilog 的 module,需要现在 Package 中或 Architecture 当 中用 Component 语法来声明,然后例化映射;在 Verilog 里调用 VHDL 的 entity, 直接例化映射。1.5 Verilog 良好编程习惯6 Goke Microelectronics良好代码编写风格的通则概括如下: 1. 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习 惯保持一致;对常量名和用户定义的类型用大写。 2. 使用有意义的信号名、端口名、函数名和参数名。 3. 信号名长度不要太长。 4. 对于时钟信号使用 clk 作为信号名, 如果设计中存在多个时钟, 使用 clk 作 为时钟信号的前缀。 5. 对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在 芯片总体设计时就定义好顶层子模块间连线的名字, 端口和连接端口的信号尽可 能采用相同的名字。 6. 对于低电平有效的信号,应该以一个下划线跟一个小写字母 b 或 n 表示。 注意在同一个设计中要使用同一个小写字母表示低电平有效。 7. 对于复位信号使用 rst 作为信号名,如果复位信号是低电平有效,建议使 用 rst_n。 8. 当描述多比特总线时,使用一致的定义顺序,对于 verilog 建议采用 bus_signal[x:0]的表示。 9. 尽量遵循业界已经习惯的一些约定。如*_r 表示寄存器输出,*_a 表示异 步信号, *_pn 表示多周期路径第 n 个周期使用的信号, *_nxt 表示锁存前的信号, *_z 表示三态信号等。 10. 在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的 内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创 建和修改的记录,包括修改时间,修改的内容等。 11. 使用适当的注释来解释所有的 always 进程、 函数、 端口定义、 信号含义、 变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求 简明扼要,只要足够说明设计意图即可,避免过于复杂。 12. 每一行语句独立成行。尽管 VHDL 和 Verilog 都允许一行可以写多个语 句,当时每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等 于 72 个字符,这样做都是为了提高代码得可读性。 13. 建议采用缩进提高续行和嵌套语句得可读性。缩进一般采用两个空格, 如果空格太多则在深层嵌套时限制行长。同时缩进避免使用 TAB 键,这样可以 避免不同机器 TAB 键得设置不同限制代码得可移植能力。 14. 在 RTL 源码的设计中任何元素包括端口、信号、变量、函数、任务、模 块等的命名都不能取 Verilog 和 VHDL 语言的关键字。 15. 在进行模块的端口声明时,每行只声明一个端口,并建议采用以下顺 序: 输入信号的 clk、rst、enables other control signals、data and address signals。 然后再申明输出信号的 clk、rst、enalbes other control signals、data signals; 16. 在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射, 这样可以提高代码的可读性和方便 debug 连线错误(即实例化时,端口用名字相7 ASIC 设计-FPGA 原型验证关) 。 17. 如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将 函数通用化,以使得它可以复用。注意,内部函数的定义一般要添加注释,这样 可以提高代码的可读性。 18. 尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效 地减少代码行数。 19. 对一些重要的 always 语句块定义一个有意义的标号,这样有助于调试。 注意标号名不要与信号名、变量名重复。 20. 代码编写时的数据类型只使用 IEEE 定义的标准类型, 在 VHDL 语言中, 设计者可以定义新的类型和子类型,但是所有这些都必须基于 IEEE 的标准。 21. 在设计中不要直接使用数字,作为例外,可以使用 0 和 1。建议采用参 数定义代替直接的数字。 同时, 在定义常量时, 如果一个常量依赖于另一个常量, 建议在定义该常量时用表达式表示出这种关系。 22. 不要在源代码中使用嵌入式的 dc_shell 综合命令。这是因为其他的综合 工具并不认得这些隐含命令,从而导致错误的或较差的综合结果。即使使用 Design Compiler,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合 文件中易于维护。这个规则有一个例外的综合命令,即编译开关的打开和关闭可 以嵌入到代码中。 23. 在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解 和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门 电 路 , 我们 建 议采 用独 立 于 工艺 库 的门 电路 , 如 SYNOPSYS 公 司 提 供 的 GTECH 库包含了高质量的常用的门级电路。 24. 避免冗长的逻辑和子表达式。 25. 避免采用内部三态电路,建议用多路选择电路代替内部三态电路。 26. 同一个层次的所有语句左端对齐;Initial、always 等语句块的 begin 关键 词跟在本行的末尾,相应的 end 关键词与 Initial、always 对齐;这样做的好处是 避免因 begin 独占一行而造成行数太多。 27. 不同变量,以及变量与符号、变量与括号之间都应当保留一个空格。 28. 使用//进行的注释行以分号结束;使用/* */进行的注释,/*和*/各占用一 行,并且顶头。8 Goke Microelectronics2基于 ALTERA 的 ASIC 验证2.1 Stratix IV FPGA 资源与架构图 2-1 Stratix IV E Device Features Stratix IV GX/GT FPGA 主要集成了最多可达 48 对全双工的 CDR-based transceivers,supporting data rates up to 8.5 Gbps and 11.3 Gbps respectively。若不 需要高速 CDR-based transceivers,可以选择 Stratix IV EP4SE820 FPGA,主要 优势在 logic, user I/O, memory intensive, 具有 820K LE, 33.2-Mbit RAM, 960 个 18 x 18 位乘法器,1120 个用户可用 IO,132 个高速 LVDS IO,12 个 PLL。 Stratix IV EP4SE820 FPGA 的关键特性:9 ASIC 设计-FPGA 原型验证Up to 813,050 LEs in Stratix IV E devices, efficiently packed in unique and innovative adaptive logic modules (ALMs).Ten ALMs per logic array block (LAB) deliver faster performance, improved logic utilization and optimized routing。 Up to 33,294 Kb of embedded memory operating at up to 600 MHz。 Each memory block is independently configurable to be a single- or dual-port RAM, FIFO, ROM, or shift register。 Up to 16 global clocks and 88 regional clocks optimally routed to meet the maximum performance of 800 MHz, Up to 71 (16 GCLK + 22 RCLK + 33 PCLK) clock networks per device quadrant in Stratix IV E devices。 各个型号的资源如图 2-1 所示;LVDS 和 PLL 的分布情况如图 2-2 所示;详 细信息请参考 Stratix IV Device Handbook。图 2-2 Stratix IV E 系列 FPGA 架构2.2 QuartusII 设计工具Altera 主要 FPGA 开发工具为 QuartusII,现在最新版本为 13.1。QuartusII 中 FPGA 开发流程如图 2-3 所示,右边的矩形框内为每个步骤用到的工具。10 Goke Microelectronics设计流程 设计工具ASIC设计转换MegaWizard Plug-in ManagerSimulationNC-Verilog VCS ModelSim Tcl AssignmentEditor PinPlanner ChipPlanner DesignPartitions LogicLock VQM Writer Synplify设计约束SynthesisPlace&Route时序分析LogicLock ChipPlanner TimeQuestProgrammingProgrammer调试SignalTap II ChipPlanner In-System Memory Content Editor图 2-3 QuartusII 设计流程2.3 ASIC 设计转换搭建 FPGA 原型验证的第一步就是把 ASIC 中的一些 RAM 和 PLL 转换成 FPGA 中的可综合的 RAM 和 PLL 模型。2.3.1 PLL 设计Stratix IV 器件中的专用全局时钟网络 (GCLK)、局域时钟网络 (RCLK) 以 及外围钟网络 (PCLK) 组成了具有层次结构的时钟架构,此结构提供了多达 236 个单一的时钟域(16 GCLK + 88 RCLK + 132 PCLK), 并支持每个器件象限中 多达 71 个单一的 GCLK、RCLK 和 PCLK 时钟源 (16 GCLK + 22 RCLK + 33 PCLK)。 表 2C1 列出了 Stratix IV 器件中的可用时钟资源。11 ASIC 设计-FPGA 原型验证表 2-1 Stratix IV 器件中的时钟资源时钟资源 时钟输入管脚 GCLK 网络 RCLK 网络 PCLK 网络 可用的资源数量 32 个单端 (16 对差分 ) 16 64/88 56/88/112/132 时钟资源的来源 CLK[0..15]p 和 CLK[0..15]n 管脚 CLK[0..15]p 和 CLK[0..15]n 管 脚,PLL 时钟输出和逻辑阵列 CLK[0..15]p 和 CLK[0..15]n 管 脚,PLL 时钟输出和逻辑阵列 DPA 时钟输出,PLD 收发器接 口时钟,水平 I/O 管脚和逻辑 阵列在 Stratix IV 器件中,时钟输入管脚、 PLL 输出和内部逻辑均能够驱动 GCLK 和 RCLK 网络。 专用时钟输入管脚,有些时钟管脚只能作为输入,有些只能作为输出,详细 定 义 参 考 Stratix IV GX and Stratix IV E Device Family Pin Connection Guidelines.pdf。 时钟管脚可以是差分时钟或者是单端时钟。Stratix IV 器件支持 16 个差分 时钟输入或者 32 个单端时钟输入。您也可以将专用时钟输入管脚 CLK[15..0] 用于高扇出控制信号,例如:异步清零、预置和时钟使能信号,以及用于协议信 号,例如通过 GCLK 或 RCLK 网络中 PCIe 的 TRDY 和 IRDY。图 2-4 时钟输入管脚与 PLL 的连接关系 PLL 的时钟输入连接关系如图 2-4 所示, For single-ended clock inputs, only the CLK&#&p pin has a dedicated connection to the PLL. If you use the CLK&#&n pin, a global clock is used.。 这些是非补偿的时钟输入路径。 对于需要 PLL 的补偿输入,12 Goke Microelectronics需使用相应的 PLL_[L, R][1,4]_CLK 输入管脚。 PLL 时钟输出 Stratix IV PLL 能够驱动 GCLK 以及 RCLK 网络。不能通过内部生成的 GCLK 或者 RCLK 来驱动 Stratix IV PLL。PLL 的输入时钟必须来自专用时钟输 入管脚或者 PLL 反馈的 GCLK 和 RCLK。只有 PLL 计数器输出 C0 - C3 能 够驱动 GCLK 网络。 在菜单界面选择 tool-&MegaWizard Plug-In Manager,新建 IP 选择 Create a new custom megafunction variation; 修改已经存在的 IP, 选择 Edit a existing custom megafuction variation。图 2-5 IP 核生成向导界面 点击 Next,搜索选择需要的 ALTPLL IP,器件类型,输出文件的类型和路 径。灰色的 IP 核为本器件不支持的 IP,高亮显示的为可用的。然后点击 Next, 每一步更加需要配置相关参数,一直到最后生成 verilog 文件。图 2-6 PLL 参数选择13 ASIC 设计-FPGA 原型验证图 2-7 输入时钟设置图 2-8 输出 c0 设置14 Goke Microelectronics图 2-9 更多输出时钟设置 输出 c0 默认选中,设置输出频率相对输入频率的 M/D 值、占空比、相位等 参数。如果还需要一个输出 clk,选中 c1 界面的 Use this clock。图 2-10 输出文件列表 在输出文件列表中, 不需要 blackbox 文件的话, 取消选中最后一项 PLL_bb.v15 ASIC 设计-FPGA 原型验证的 blackbox 文件。点击 Finish,完成 IP 核的设计。后期若需要修改某个参数, 可以直接修改生成的 verilog 文件。如下所示可以修改频率系数和占空比。 altpll_component.clk0_divide_by = 1, altpll_component.clk0_duty_cycle = 50, altpll_component.clk0_multiply_by = 3, 如果要查看 PLL 相关说明文档,可以点击右上角的 Documentation。2.3.1 RAM 设计存储模块的转换分包括 RAM(Ramdom Access Memory) 、ROM(Read Only Memory) 。RAM 主要存储程序运行中的变量和数据。ROM 主要用于存放 CPU boot 程序。RAM 是易挥发性随机存取存储器,掉电后存储的内容都丢失。ROM 只读存储器,断电后信息不丢失。 RAM 有两大类,一种称为静态 RAM(Static RAM/SRAM) ,SRAM 速度非 常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻 的地方使用, 譬如 CPU 的一级缓冲, 二级缓冲。 另一种称为动态 RAM (Dynamic RAM/DRAM) ,DRAM 保留数据的时间很短,速度也比 SRAM 慢,不过它还是 比任何的 ROM 都要快,但从价格上来说 DRAM 相比 SRAM 要便宜很多,计算 机内存就是 DRAM 的。DDR RAM(Date-Rate RAM)也称作 DDR SDRAM,这 种改进型的 RAM 和 SDRAM 是基本一样的,不同之处在于它可以在一个时钟读 写两次数据, 这样就使得数据传输速度加倍了。 这是目前电脑中用得最多的内存。 DDR RAM 将会在第四章单独介绍。 在菜单界面选择 tool-&MegaWizard Plug-In Manager,根据需要选择单端或者 双端 RAM 和 ROM 的类型,输出文件类型和路径。图 2-11 存储器类型选择16 Goke Microelectronics如图 2-11,单端 RAM 选择 RAM:1-PORT, 双端 RAM 选择 RAM:2-PORT, 单端 ROM 选择 ROM:1-PORT, 双端 ROM 选择 ROM:2-PORT,器件类型选择 Stratix IV,输出文件类型选择 Verilog HDL,设置输出文件路径和文件名。 如图 2-12,选择 RAM 的位宽和深度,使用的 memory block 类型,一般选 择 A uto,时钟策略 Single clock 为输入输出为同一个 clock,Dual clock 为输入和 输出或者读写分别采用不用的 clock,一般用于双端 RAM 中。图 2-12 RAM 宽度和深度设置图 2-13 输出参数设置17 ASIC 设计-FPGA 原型验证在 ASIC 中一般对 RAM 输出不需要再用 clk 打一拍, 所以在生成 RAM 的时 候,取消选中’q’ output port;若 ASIC RAM 中有 byte 使能功能,在此步中选中 Create byte enable signal。图 2-14 读写冲突设置 当读取正在被写入的 RAM 某个地址的时候,输出 q 可以是 NewData, OldData,DonotCare。图 2-15 初始化和调试设置18 Goke Microelectronics若需要在调试的时候在线修改 RAM 或者 ROM 的内容, 选中 Allow In-System Memory Content Editor to capture and updata content independently of the system clk,给 RAM 设置一个 ID 名称方便识别。 ROM 一般需要初始化 mif 文件,RAM 一般不需要。mif 文件格式如下:DEPTH = 128; WIDTH = 8; ADDRESS_RADIX = DEC; DATA_RADIX = HEX; CONTENT BEGIN 0 : FF; 127 : FF; END; //结尾标志 // memory address : data //表明存储深度 //表明位宽 // The radix for address values,十进制 // The radix for data values,十六进制 // start of (address : data pairs)图 2-16 输出文件列表 最后列出输出文件列表,若不需要 blackbox 文件,取消选择*_bb.v blackbox 文件。2.4 时序约束静态时序分析(Static Timing Analysis,简称 STA)可以简单的定义为:设计 者提出一些特定的时序要求(或者说是添加特定的时序约束) ,套用特定的时序19 ASIC 设计-FPGA 原型验证模型,针对特定的电路进行分析。分析的最终结果当然是要求系统时序满足设计 者提出的要求。时序约束的作用有提高设计的工作频率, 利用静态时序分析工具 TimeQuest 获得正确的时序分析报告。 在 FPGA 设计工具中包含有 4 种路径: 从输入端口到寄存器, 从寄存器到寄 存器,从寄存器到输出,从输入到输出的纯组合逻辑。通常,需要对这几种路径 分别进行约束,以便使设计工具能够得到最优化的结果。下面对这几种路径分别 进行讨论。 1. 从输入端口到寄存器: 这种路径的约束是为了让 FPGA 设计工具能够尽可能的优化从输入端口到 第一级寄存器之间的路径延迟, 使其能够保证系统时钟可靠的采到从外部芯片到 FPGA 的信号。 约束名称:input delay。 约束条件的影响主要有 4 个因素: 外部芯片的 Tco, 电路板上信号延迟 Tpd, FPGA 的 Tsu, 时钟延迟 Tclk. Tco 的参数通常需要查外部芯片的数据手册。 计算 公式: input delay = Tco+Tpd+Tsu-Tclk。 FPGA 的 Tsu 也需要查 FPGA 芯片的手册。 FPGA 速度等级不同,这个参数也不同。Tpd 和 Tclk 需要根据电路板实际的参数 来计算。 通常, 每 10cm 的线长可以按照 1ns 来计算。 例如:系统时钟 100MHz, 电路板上最大延迟 2ns,时钟最大延迟 1.7ns,Tco 3ns,FPGA 的 Tsu 为 0.2ns。 那么输入延迟的值:max Input delay = 2+3+0.2-1.7=3.5ns. 这个参数的含义是指 让 FPGA 的设计工具把 FPGA 的输入端口到第一级寄存器之间的路径延迟 (包括 门延迟和线延迟)控制在 10ns-3.5ns=6.5ns 以内,其中 10ns 是系统时钟。 2. 寄存器到寄存器: 这种路径的约束是为了让 FPGA 设计工具能够优化 FPGA 内寄存器到寄存器 之间的路径,使其延迟时间必须小于时钟周期, 这样才能确保信号被可靠的传 递。 由于这种路径只存在于 FPGA 内部,通常通过设定时钟频率的方式就可以 对其进行约束。对于更深入的优化方法,还可以采用对寄存器的输入和寄存器的 输出加入 适当的约束,来使逻辑综合器和布线器能够对某条路径进行特别的优 化。还可以通过设定最大扇出数来迫使工具对其进行逻辑复制,减少扇出数量, 提高性能。 3. 寄存器到输出: 这种路径的约束是为了让 FPGA 设计工具能够优化 FPGA 内部从最后一级寄 存器到输出端口的路径,确保其输出的信号能够被下一级芯片正确的采到。 约束的名称: output delay。 约束条件的影响主要有 3 个因素: 外部芯片的 Tsu, 电路板上信号延迟 Tpd, 时钟延迟 Tclk。Tsu 的参数通常需要查外部芯片的 数据手册。计算公式:output delay = Tsu+Tpd-Tclk。例如:系统时钟 100MHz,电路板上最大延迟 2ns,时钟 最大延迟 1.7ns,Tsu 1ns,输出延迟的值:max output delay = 1+2-1.7=1.3ns。这 个参数的含义是指让 FPGA 的设计工具把最后一级寄存器到输出端口之间的路20 Goke Microelectronics径延迟(包括门延迟和线延迟)控制在 10ns-1.3ns=8.7ns 以内。 4. 从输入端口到输出端口: 这种路径是指组合逻辑的延迟,指信号从输入到输出没有经过任何寄存器。 给这种路径加约束条件,需要虚拟一个时钟,然后通过约束来指定哪些路径是要 受该虚拟时钟的约束。在 Synplify Pro 和 Precision 中都有相应的约束来处理这种 路径。 常用的约束方法有: 1. 位置约束:通过 Assignments/Pin Planner 设置 2. 时序约束:通过 Assignments/Assignment editor 或 TimeQuest 设置 3. 区域约束:通过 LogicLock 设置图 2-17 Assignment editor 如图 2-17 所示为 Assignment editor 的界面,双击 From 下面的 new,弹出图 2-18 所示对话框,通过匹配符,点击 list 查找需要约束的起点和终点。双击 AssignmentName 下的 new 区域,在下拉列表选择约束的类型。图 2-18 查找约束对象 也可通过 TimeQuest 进行时序约束, 如图 2-19 所示, 在 constraints 下面有对21 ASIC 设计-FPGA 原型验证clock , generated clock, clock uncertainty, input delay, output delay, false path, multicycle path 的设置。或者通过 Read SDC file 来读取现有的 SDC 文件来设置 约束。更详细的介绍可以参考 Quartus II Handbook 的 Timing Analysis 章节。图 2-19 TimeQuest 中进行时序约束2.4.1 QSF&Tcl通过以上方法设置时序约束一般效率低, 通过直接在 QSF 文件中用 Tcl 命令 设置时序约束不仅效率高,而且编辑起来方便,可快速应用于其他工程。在 TimeQuest 中每设置一项,Console 界面中就会产生相应的 Tcl 命令。下面介绍在 QSF 文件中如何对管脚、FalsePath、MultiCycle 等各种时序参数进行约束。 set_location_assignment PIN_L1 -to clk1 create_clock -name ad_clk -period 10.000 [get_ports {clk1}] create_clock -name clk_in -period 20.000 [get_ports {clk2}] create_generated_clock -name clk_div2 -source [get_ports {clk1}] -divide_by 2 -multiply_by 1 [get_ports {clk2}] set_clock_uncertainty -from { clk1 } -to { clk2} -setup 0.1 set_input_delay -clock { clk1 } 2 [get_ports {data}] set_false_path -from [get_clocks {clk1}] -to [get_clocks{clk2}] set_multicycle_path -from [get_clocks {clk1}] -to [get_clocks {clk2}] -setup -end 4 set_max_delay -from [get_clocks {clk1}] -to [get_clocks {clk2}] 4 这些 Tcl 命令可以放在 QSF 文件中或者 Tcl 脚本中,可以通过如图 2-20 所22 Goke Microelectronics示产生 Tcl 脚本,编辑添加时序约束信息。然后可以通过在 QuartusII 中选择 Tools-&Tcl Scripts,或者 TimeQuest 中选择 Script-&Run Tcl Script 来执行 Tcl 脚本。图 2-20 QuartusII 中生成 Tcl 脚本2.4.2 LogicLock也可使用 Logiclock 工具,解决时序收敛的问题,大型、复杂或高性能要求 的设计需要反复的设计编译、 时序分析、 优化才能达到时序收敛 (timing closure) 满足设计的时序需求,负担较大。而 LogicLock 设计流程的输入模块是已经优化 并达到时序收敛的子模块,通过 LogicLock 设计方法继承以往编译与实现的结 果,在保证每个子模块时序收敛的基础上,达到顶层时序收敛,则整个设计时序 收敛,故 LogicLock 设计流程能有效避免繁琐的设计编译、时序分析、优化循环 工作,提高设计效率。 LogicLock 设计方法的核心是合理的规划 region。在 altera 支持的 LogicLock 的器件上创建合适的 region,将设计使用到的资源规划在矩形区域内,然后将经 过优化的逻辑适配到事先规划的 region 内,并将该区域反标注(back-annotate) 到布局布线过程中,然后再将设计的其余部分集成起来,这样就能继承设计优化 的性能。 可以直接在使用 Tcl 脚本设置 LogicLock 区域的大小和位置。也可通过 Assignments-&LogicLock Regions Window 打 开 LogicLock 窗 口 , 在 Project Navigator 中 直 接 拖 动 相 关 的 模 块 到 LogicLock Regions Window 。 或 者 在 ChipPlanner 中单击 View-&LogicLock Regions-&Create LogicLock Region。2.5 综合布局布线23 ASIC 设计-FPGA 原型验证2.5.1 综合设置图 2-21 QuartusII 中综合参数优化图 2-22 QuartusII 中布局布线参数优化 如图 2-21 和图 2-22 通过 Assignments-&Settings 设置综合, 布局布线的参数, 如果时序不能满足可以把标识的选项都选中,再综合编译。24 Goke Microelectronics2.5.2 增量编译下面开始来仔细研究研究这个增量编译。 首先,得先看看 QuartusII 的编译过程是个怎么样的,要了解这个过程很简 单,看看下面这张图,谁都不陌生:图 2-23 编译任务列表 当我们点全编译之后,下面的几个过程就会一个一个打上勾,而我们编译的 过程也就是和这个运行过程是一致的:先是分析综合,再是布局布线,然后是汇 编(这里不是指汇编语言的汇编,而是说将布局布线后的“电路”汇编成可下载到 芯片内的“程序”) ,还有时序分析以及生成网表。 我们仔细看它编译的过程会发现其中耗时最多的是分析综合和布局布线 (这 点从上图右侧的时间标注也能看出来) ,所以我们想提高编译速度也应该从这点 入手。QuartusII 也有相关的自动增量编译的设置,如下图:图 2-24 自动增量编译的设置25 ASIC 设计-FPGA 原型验证第一个是多核处理器的设置,这样可以提高整体的速度;第二个则是采用 Smart Compilation,智能编译方式,它可以完成的功能――如果设计源文件没有 改动,那 QuartusII 将不再进行分析综合,而直接进入布局布线阶段。 增量编译的原理就是,减少每次编译里我们设计已经完成的部分,进而不需 要再重复设计者认为已经完成的工作。设计者将整个工程分成 N 逻辑模块,并 设定各个模块的状态, 这样编译器在分析综合的时候便可以对那些不需修改的部 分直接采用上次的结果。布局布线的时候也是一样的,如果该子模块不需要更改 了就采用上次的结果,如需更改再重新进行布局布线。 而上面提到的将整个工程分成 N 个模块, 我们就要用到 Quartus 提供的两个 高级工具――Design Partitions 和 LogicLock Regions。 增量编译主要用到的两个工具――Design Partition 和 LogicLock。图 2-25 增量编译工具 首先要提出一个概念,网上大多对增量编译的简要说明是:采用 LogicLock 进行增量编译。这是错误的看法,LogicLock 并不是增量编译的一部分,只是在 增量编译过程中建议使用 LogicLock。 其实我们只要用到 Design Partition 就可以完成“增量编译”了。 下面简单介绍 如何使用 Design Partition 工具: 首先, 得对整个工程进行一次全编译 (也可不编译, 只进行顶层模块的分析, 如下图 2-26 标出的小图标则可点开分析顶层模块下的子模块) ,经 Analysis 过程26 Goke MicroelectronicsQuartus 可自动分析出整个工程顶层模块下含有哪些子模块。图 2-26 Analysis & Elaboration 然后,通过 Design Partition 对子模块进行“逻辑分区”。一般情况下,我们可 以直接将上一步中分析出的子模块设定成“逻辑区域”;图 2-27 设置 Patition 模块 设定好了以后打开 Design Partition Window 可看到如下图:图 2-28 Design Partition Window 它的结构图与 Project Navigator 里的很像,有一个 TOP 模块,下面还有我们 设定的各个 Partition。表中的各列参数是对各 Partition 的设定,其中最关键的一 个设定是 Netlist Type,它有四个可选值――Source File,Post-Synthesis,Post-fit,27 ASIC 设计-FPGA 原型验证Empty(如上图中所标) 。它们各自的含义是: Source File:如果源代码未修改,则仅不重新 Analysis,还需进行 Synthesis 和 Fitter。 Post-Synthesis:如果源代码未修改,不需重新 Analysis、Synthesis,结果只 进行 Fitter。 Post-Fit:如果源代码未修改,保留前次 Analysis、Synthesis、Fitter 结果。 Empty:标志为空分区,编译时将忽略此分区。 这样我们就很明白了,其实要想达到“增量编译”的目的,只需将各个子模块 设置在 Design Partition 里,并将未进行修改的各个模块设定成 Post-fit,而修改 过的模块设定为 Source File。需要注意的是,顶层模块 TOP 的状态也需设定为 Post-fit。然后编译综合,所用时间大大减少。 我们先来搞清楚两个概念 ――“ 逻辑分区 ” 和 “ 物理分区 ” 。前面所讲到的 Design Partition 只是将设计进行“逻辑分区”,在进行这样的分区之后,编译器在 整个工程的综合、布局布线上面并不会有什么太大的变化,这个逻辑上的分区只 是用来让用户清楚,哪部分逻辑是分区 A 的,哪部分逻辑是分区 B 的。之后用 户就可通过设定 A、B 分区的属性类型来告诉编译器,哪部分已经不需要重新综 合、布局布线了;哪部分已经修改了,需要重新进行综合等等。 现在来看看 LogicLock 的作用,是对设计进行“物理分区”,更准确的说,它 是对目标器件进行“物理分区”,然后将逻辑上的功能模块分配到一定的分区内。 也就是说,我们先对目标器件进行物理区域划分,然后选择一个逻辑功能模块分 配到某个物理区域,告诉编译器,以后这部分逻辑功能就只能在这个物理区域里 面布局布线。同样的,用户可以对各个模块进行属性上的设定,告诉编译器以什 么样的形式进行布局布线。 下面简单介绍下 LogicLock 的使用, 我们前面已经用 Design Partition 进行了 “逻辑分区”, 我们可以用同样的方法, 在设计的树形结构里面右键, 然后如下图:图 2-29 生成 LogicLock 区域28 Goke Microelectronics把各个子模块加入到 LogicLock Region 里面之后如下图:图 2-30 LogicLock 生成结果 里面有两个主要的参数,Size 和 State:Size 有两个选项,Auto、Fixed;而 State 也有两个选项,Locked、Floating。但是并不是有着四个组合,其实只有着 下面三种状态:图 2-31 LogicLock 实现形式 第一种, Auto+Floating: 由编译器自动选择区域大小和位置; (在 Chip Planner 里面由虚线显示) 第二种,Fixed+Floating:由编译器选择位置,但由用户设定区域大小; (在 Chip Planner 里面由短实线显示) 第三种,Fixed+Locked:区域大小和位置都由用户来设定。 (在 Chip Planner 里面由实线显示) 那 LogicLock 在增量编译里面有什么作用呢?还是需要强调一下, 增量编译 不是一定非要用到 LogicLock,但 Quartus 推荐在增量编译时使用 LogicLock,因 为它可以让增量编译的思想贯彻得更彻底。 我们想想在前面用 Design Partition 时出现的一种情况: 改动后的模块逻辑功 能上变化比较大,影响了其它“ 逻辑分区”的布局布线,这样未改动部分也需要 进行重新编译了。但如果这个时候使用的是 LogicLock,由于每个逻辑功能模块 都分配了一定的“物理区域”,改动后的模块再怎么变也是在它自己的“地盘”里, 不会影响到别的“地盘”的布局布线。 但 LogicLock 也会带来一定的负面影响,最直接的,一般情况下,时序分析 后的 Fmax 都要更低一些。这是为什么呢?其实想想也能知道,如果没有使用 LogicLock,编译器可以自动从全局出发去做出做大的优化,而我们人为地进行 了物理分区限定,那即使可能每个小模块做到了很好的优化,但是由于各个区域 之间的布局布线受到了限制,那自然会有所影响。但也不能如此绝对地断定,如29 ASIC 设计-FPGA 原型验证果在占用资源很庞大的情况下,使用这种方法还能带来意想不到的效果。2.5.3 VQM & QXP当项目过程中,不想给甲方源码时,该如何?我们可以用网表文件 QXP 或 者 VQM 对资源进行保护。 下面讲解这两个文件的具体生成步骤: QuartusII 的 QXP 文件为 QuartusII Exported Partition, 用于创建综合或者 PAR 之后的网表文件。 QuartusII 的 VQM 文件为 verilog QuartusII mapping,只能保存综合后,PAR 前的综合结果。 QXP 文件生成 1. 在 QuartusII 的 Project Navigator 中选中欲创建 QXP 的 module 文件,右 击,选择“Design Partition & Set as Design Partition”。 2. 综合整个工程,想使用 PAR 后的 QXP 就需要编译整个工程。 3. 点击菜单“Process”,选择“Start & Start Partition Merge”,以创建完整的 module 网表。 4. 点击菜单“Project”,选择“Export Design Partition”。 5. 在弹出窗口中选择想要的层次和网表选项,即可导出 QXP 文件。 注:使用时,仍需右击选择“Set as Design Partition”,否则,有时候会出错, 只是有时候而已。 通过 RTL 查看器看到的 QXP 模块是空的,但 PAR 后即可看到里面的模块。 VQM 文件生成 1. 用 QuartusII 创建以相应 module 为顶层的工程。 2. 点击菜单“Process”, 选择“Start & Start VQM Writer”, 即可得到 VQM 文件。 3. 使用 synplify 创建相应 module 为顶层的工程,编译综合后直接生成相应 的 VQM 文件。注:有的器件不支持 VQM,此时只能用 QXP。2.5.4 时序分析在 QuartusII 的 Tasks 窗口中,双击 TimeQuest Timing Analysis,会依次执行 Analysis&Synthesis-&Fitter-&Assembler-&TimeQuest Timing Analysis,会产生 sof 编 程文件, 同时产生整个工程详细的时序报告。 如图 2-32 所示。 可以查看不同 clock 的建立和保持时间是否满足,如果 slack 为负值,那么要采取措施来优化时序。 如果要得到更详细的时序信息,可以双击 Tasks 窗口中的 TimeQuest Timing Analyzer 进行进一步的分析和时序约束。如图 2-33 所示。30 Goke Microelectronics图 2-32 时序报告图 2-33 使用 TimeQuest 进行详细时序分析31 ASIC 设计-FPGA 原型验证2.6 下载设计文件Altera FPGA 有三类配置下载方式: 主动配置方式 (AS) 和被动配置方式 (PS) 和最常用的(JTAG)配置方式。 AS 由 FPGA 器件引导配置操作过程,它控制着外 部存储器和初始化过程,EPCS 系列.如 EPCS1,EPCS4 配置器件专供 AS 模式。 PS 则由外部计算机或控制器控制配置过程。 通过加强型配置器件 (EPC16, EPC8, EPC4)等配置器件来完成,JTAG 接口是一个业界标准,主要用于芯片测试等功 能,使用 IEEE Std 1149.1 联合边界扫描接口引脚,使用 Altera 下载电缆或主控器 来完成。 在 Tasks 窗口中,双击 Assembler 即可生成下载文件。然后可对目标器件进 行编程和配置,下载设计文件到硬件中进行硬件验证。 QuartusⅡ编程器 Programmer 最常用的编程模式是 JTAG 模式, JTAG 模式 主要用在调试阶段,主动串行编程模式(AS)用于板级调试无误后将用户程序 固化在串行配置芯片 EPCS 中。 点击 Tools-&Programmer 或者双击 Tasks 窗口中的 ProgramDevice 打开下载 界面,如图 2-34 所示。选择 HardwareSetup 查找下载器,Mode 选择 JTAG(sof 文件)或 AS(pof 文件)模式,Add File 添加生成好的 sof 下载文件,选中 Program/Configure,然后点击 Start 开始下载。Progress 会显示进度,下载成功后 就可以调试了。图 2-34 可编程文件下载2.7 Debug32 Goke Microelectronics2.7.1 In-System Memory Content EditorQuartusII 提供工具实时修改存储器中的存储值,这就是 In-System Memory Content Editor。 首先分析该工具的好处和限制, 使用该工具显然方便了 FPGA 的调试, 可以 实时更改 RAM 或者 Rom 中的数值。使用该工具的要求,必须利用 Jtag,目前只 支持实时修改常数(constant) 、单口 RAM 以及 ROM。另外此工具最好只是用 来调试,因为器件掉电重启以后 Memory 还是会加载其初始值(除非工程重新更 改初始值并重新编译) 。接下来介绍如何使用此工具: 1. 在例化 Constant、RAM 或者 ROM 的时候首先要使能 In-System Content Edittor,如图 2-35 所示,并设置一个 Instance ID 名称; 2. 重新编译加载器件; 3. 启动 tools-&In-System Memory Content Editor,如图 2-36 所示; 4. 在对应的 Instance ID 上右键,从弹出的功能列表中加载需要烧写的 mif 格式的文件,通过“Write data to In-system memory”命令写入到 ROM 中。对存储 器内容进行读写操作。图 2-35 使能 In-System Memory Content Editor33 ASIC 设计-FPGA 原型验证图 2-36 ROM 内容更新2.7.2 ChipPlannerChipPlanner 是在设计后端对设计进行快速查看和修改布局布线的强有力工 具。它可以显示器件的所有资源和完整的布局信息,例如,互连和布线连线、逻 辑阵列块(LAB) 、LE 配置、PLL 配置、RAM、DSP、I/O 等。可以用于 making floorplan assignments, implementing engineering change orders (ECOs), and performing power analysis. Also, you can analyze your design and achieve a faster timing closure with the Chip Planner. The Chip Planner provides physical timing estimates, critical path display, and routing congestion view to help guide placement for optimal performance。 在 ChipPlanner 中使用 ResourcePropertiesEditor 可以修改 LE、 ALM、 IOE、 PLL 等设计模块的功能 (详细可以参考 quartusii_handbook Section IV. Engineering Change Management) 。图 2-37 display network and routing34 Goke Microelectronics图 2-38 Displaying Fan-In & Fan-Out图 2-39 Viewing Critical Path图 2-40 Viewing Physical Timing Estimate35 ASIC 设计-FPGA 原型验证图 2-41 Viewing Routing Congestion图 2-42 working with assignment图 2-43 Create LogicLock Regions36 Goke Microelectronics图 2-44 LogicLock Regin Properties图 2-45 Performing ECO changes图 2-46 Resource Property Editor37 ASIC 设计-FPGA 原型验证2.7.3 SignalTapIIAltera 的 SignalTap II 逻辑分析仪是 Altera FPGA 的在线、 片内信号分析工具。 与硬件逻辑分析仪相比,SignalTap 具有成本低廉、使用方便、灵活性大等特点, 对于 FPGA 设计开发人员来说,无疑是一个好的帮手。图 2-47 Analysis & Elaboration图 2-48 Sart SignalTap II图 2-49 采样信号和采样配置38 Goke MicroelectronicsData 一栏中的 Sample depth 下拉菜单中选择采样深度, 在 RAM type 下拉菜 单中选择 RAM 类型,在 Trigger position 的下拉框中选择触发位置,在 Trigger conditions 一栏中的下拉框中选择触发级数。 SignalTapII 有两种类型的 buffer(缓冲):环形(non-segmented buffer)和分段 (segmented buffer),默认为环形缓冲,也就是不选择 Segmented。 Storage qualifier 可以让设计者有选择的存储某些或者某段信号的内容, 只存 储被使能的信号,可以更好的展现信号全部特征。只有环形缓冲能使用 Storage Qualification feature。 一共有 6 种 Storage Qualifier 类型: 1. Continuous Mode Continuous 模式为默认设置, 采样存储所有被选取的信号。 同时本模式关闭 Storage Qualification 特性。 2. Input Port Mode 选择任何信号作为写使能信号,可以是内部信号也可以是外部引脚,当使能 信号为高时存储,为低时无效。 3. Transitional Mode 采样信号只在被选择信号发生变化的时候存储, 当这个类型被使能的时候在 SignalTapII 设置页的 node list 会多出两列来显示那个或者那些信号被选择了。 4. Conditional Mode 采样信号只在被选择信号定义的组合逻辑为真的时候才被存储, 同样在设置 页也会多出两列来显示哪些信号被选择来定义了什么逻辑。 5. Start/Stop Mode 和 Conditional 类似,基于两个设置好的条件,一个开始一个停止,满足开 始条件开始存储,满足停止条件结束存储。同样在设置页也会多出三列来显示哪 些信号被选择来定义这两个条件。 6. State-Based Mode 基于状态机触发流程, 这是一种更完备的控制何时以及如何来存储采样信号 的模式。 利用高级触发可以建立复杂的逻辑表达式,更好地定义触发事件。当选择使 用高级触发时会自动在 SignalTapII 窗口中加入高级触发标签,可以在基本和高 级触发窗口之间切换,在 Trigger Conditions 栏选择 Advanced,弹出高级触发条 件的编辑窗口(详细参考 Quartus II Handbook 的 System Debugging Tools 章节) 。 在图 2-49 的空白区域双击鼠标左键,如图 2-50,设置要查找的信号名,点 击 List, 匹配的信号会列出来, 添加采样信号, Filter 选择 SignaltapII: Pre-Synthesis, 这样可以抓取 Analysis& Elabration 后的可用信号。 在图 2-49 中,点击 Clock 右边的 Browse 按钮,设置采样时钟,采样时遵循 奈奎斯特采样定理。不能采样比采样时钟快的信号(解决办法:用更快的采样时 钟)。39 ASIC 设计-FPGA 原型验证图 2-50 添加采样信号图 2-51 设置采样时钟图 2-52 高级设置40 Goke Microelectronics图 2-53 保存 stp 文件图 2-54 使能 SignalTap 如图 2-55,点击 Start Compilation 对包含 stp 的工程进行综合布局布线,直 至生成 sof 编程文件。在 QuartusII 主界面中,File-&Open,如图 2-56 所示打开波 形文件,或者直接拖动 stp 文件至 QuartusII 主界面中。图 2-55 编译包含 stp 的工程图 2-56 打开 SignalTapII 波形文件41 ASIC 设计-FPGA 原型验证图 2-57 触发和下载 如图 2-57 所示,通过 Setup 链接 JTAG Chain,通过 SOF Manager 下载与 stp 文件对应的 sof 编程文件 (如果是两片 FPGA,注意在 Device 中选择需要编程的那 片 FPGA) 。 在 Setup 页面中的 Trigger Conditions 中,右键设置某个信号为触发条件,可 以设置为高低电平、上升沿、下降沿触发,如果为 Don’t Care,运行 Run Analysis 等同于 Autorun Analysis。如果需要保存每次抓取的波形以方便比较,可以勾选 Data Log。点击 Run Analysis,一旦触发条件满足,Data 窗口就会有捕获的波形。图 2-58 抓取波形42 Goke Microelectronics图 2-59 run & stop图 2-60 Setting 中 Enable SignalTapII 如图 2-60 所示,可以在 Setting 中使能 SignalTapII,选择需要加载的 stp 文 件。2.7.4 Keep Signals许多 RTL 信号会在综合和布局布线时被优化掉,导致 SignalTap 中查找不 到需要关注的信号。可以通过设置 QuartusII 的综合属性(synthesis attributes) , 阻 止 对 这 些 特 定 信 号 的 优 化 。 或 者 通 过 在 RTL 代 码 中 添 加 syn_preserve syn_noprune keep 综合属性约束(具体方法参考 quartusii_handbook Chapter 16:43 ASIC 设计-FPGA 原型验证Quartus II Integrated Synthesis: Quartus II Synthesis Options) 。 1. Preserve Registers This attribute and logic option directs the Compiler not to minimize or remove a specified register during synthesis optimizations or register netlist optimizations. Optimizations can eliminate redundant registers and registers w this option prevents the software from reducing a register to a constant or merging with a duplicate register. This option cannot preserve registers that have no fan-out. To prevent the removal of registers with no fan-out, refer to “Noprune Synthesis Attribute/Preserve Fan-out Free Register Node”。you can set the preserve attribute in your HDL code, as shown: ? Verilog HDL Code: syn_preserve Attribute reg my_reg /* synthesis syn_preserve = 1 */; Verilog-2001 Code: syn_preserve Attribute (* syn_preserve = 1 *) reg my_ ? VHDL Code: preserve Attribute signal my_reg : attribute preserve : attribute preserve of my_reg : 2. Noprune Synthesis Attribute/Preserve Fan-out Free Register Node This synthesis attribute and corresponding logic option direct the Compiler to preserve a fan-out-free register through the entire compilation flow. This option is different from the Preserve Registersoption, which prevents the Quartus II software from reducing a register to a constant or merging with a duplicate register. Standard synthesis optimizations remove nodes that do not directly or indirectly feed a top-level output pin. This option can retain a register so you can observe the register in the Simulator or the SignalTap II Logic Analyzer. You can set the Preserve Fan-out Free Register Node logic option in the Quartus II software, or you can set the noprune attribute in your HDL code, as shown: ? Verilog HDL Code: syn_noprune Attribute reg my_reg /* synthesis syn_noprune */; Verilog-2001 and SystemVerilog Code: noprune Attribute (* noprune *) reg my_ ? VHDL Code: noprune Attribute signal my_reg : attribute noprune: attribute noprune of my_reg : 3. Keep Combinational Node This synthesis attribute and corresponding logic option direct the Compiler to44 Goke Microelectronicskeep a wire or combinational node through logic synthesis minimizations and netlist optimizations. The option cannot keep nodes that have nofan-out. You cannot maintain node names for wires with tri-state drivers, or if the signal feeds a top-level pin of the same name。you can set the keep attribute in your HDL code, as shown: ? Verilog HDL Code: keep Attribute wire my_wire /* synthesis keep = 1 */; Verilog-2001 Code: keep Attribute (* keep = 1 *) wire my_ ? VHDL Code: syn_keep Attribute signal my_wire: attribute syn_keep: attribute syn_keep of my_wire:2.8 Example 工程下面将展示从新建工程至编译下载的过程。图 2-61 新建工程45 ASIC 设计-FPGA 原型验证图 2-62 添加文件图 2-63 选择器件 C 代表是商业品, I 代表工业级, 除了 C4 外, 速度等级 4 表示每过一个 LUT 0.4ns,还有 C3 和 C2。Altera 的 FPGA 中,C2 快于 C3,C3 又快于 C4,就是数 字越小越快。Xilinx 的正好相反。46 Goke Microelectronics图 2-64 工程 summary 点击 Finish 生成 GK_XXXX.qsf 工程列表和配置文件,如下例所示可以在此 文件的基础上添加各种文件,添加约束和工程配置。 添加 verilog 文件用 VERILOG_FILE,VHDL 文件用 VHDL_FILE,vqm 文 件用 VQM_FILE,qxp 文件用 QXP_FILE。 set_global_assignment -name FAMILY &Stratix IV& set_global_assignment -name DEVICE EP4SE820F43C4 set_global_assignment -name TOP_LEVEL_ENTITY GK_XXXX set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 set_global_assignment -name LAST_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 set_global_assignment -name VERILOG_FILE GK_XXXX.v set_global_assignment -name VHDL_FILE IIC.vhd set_global_assignment -name VQM_FILE SPI.vqm set_global_assignment -name QIP_FILE SPLL.qip set_location_assignment PIN_L1 -to clk1 create_clock -name ad_clk -period 10.000 [get_ports {clk1}] create_clock -name clk_in -period 20.000 [get_ports {clk2}]47 ASIC 设计-FPGA 原型验证create_generated_clock -name clk_div2 -source [get_ports {clk1}] -divide_by 2 -multiply_by 1 [get_ports {clk2}] set_clock_uncertainty -from { clk1 } -to { clk2} -setup 0.1 set_input_delay -clock { clk1 } 2 [get_ports {data}] set_false_path -from [get_clocks {clk1}] -to [get_clocks{clk2}] set_multicycle_path -from [get_clocks {clk1}] -to [get_clocks {clk2}] -setup -end 4 set_max_delay -from [get_clocks {clk1}] -to [get_clocks {clk2}] 4 添加 design 文件和时序及管脚约束之后,点击快捷栏的 Start Compilation 按 钮,或者双击 Task 列表中的 Compile Design,开始综合,布局布线,时序分析, sof 编程文件的生成。48 Goke Microelectronics3基于 XILINX 的 ASIC 验证3.1 Vertex-7 FPGA 资源与架构图 3-1 Virtex-7 FPGA Feature Summary Virtex-7 FPGA 除具有 1954560 个逻辑单元外,Virtex-7 2000T 还包括含有 305400 个 CLB 切片的可配置逻辑块(CLB),分布式 RAM 容量高达 21550KB。 它共有 2160 个 DSP slice、46512 个 BRAM、24 个时钟管理模块、36 个 GTX 收 发器(每个性能达 12.5Gbps)、24 个 I/O bank 和 1200 个用户 I/O。支持 72 位 DDR3 存储器接口并行 bank,能实现 2133Mbps 的性能。3.2 设计工具 ISE 与 VivadoXilinx 在推出 Virtex-7 FPGA 产品的时候,相应的推出了 Vivado 软件来代替 ISE,Vivado 的综合性能比 ISE 有了很大改善,编译时间减少 50%,内存消耗减49 ASIC 设计-FPGA 原型验证少 50%,如果开发 Virtex-7 系列 FPGA,最好使用 Vivado,最新版本 2014.02。设计流程设计工具ASIC设计转换CoreGeneratorSimulationNC-Verilog VCS ModelSim Tcl ConstraintsEditor PlanAhead Floorplanner Partition Pblock SmartGuide SmartXplorer Synplify Floorplanner Pblock FPGAEditor TimingAnalyzer设计约束SynthesisPlace&Route时序分析ProgrammingiMPACT调试ChipScope ChipViewer图 3-2 ISE 设计流程50 Goke Microelectronics设计流程设计工具ASIC设计转换IP CatalogSimulationNC-Verilog VCS ModelSim Tcl I/0 Planning TimingConstraints Floorplanning Pblock Checkpoint Strategy Synplify Floorplanning Pblock设计约束SynthesisPlace&Route时序分析TimingAnalysisProgrammingHardwareManager调试图 3-3 Vivado 设计流程51Debug ASIC 设计-FPGA 原型验证图 3-4 XC7V2000T Bank 如图 3-4 所示为 XC7V2000T 的 bank 结构图,每个 bank 有 50 个 I/O,其中包 含四组 Memory Byte Group 和用于提供参考电压用于内部 DCI 使用的 VRP/VRN 引脚, 每组 Memory Byte Group12 个 I/O, 其中有两个引脚可以用于连接 DDR 的 DQS 信号。每个 bank 都有相同的 Vcco 电压。DDR2/3 设计中需要内部或外部的 VREF,除了 CONFIG Bank0,每个 bank 都有两个 VREF 管脚,一个 bank 只能 有一个 VREF 电压值。 每 6 个 bank 又组成一个 SLR(Super Logic Region),提出 SLR 的概念是因为当芯片面积小的时候,所有的资源都能被访问到,从一点到最远一52 Goke Microelectronics点的延时也能忍受; 但是随着时钟频率越来越高,周期越来越小,同时设计复杂 度加大,从一点随意访问另外一点的挑战越来越大,如时钟内部走线 SKEW,驱 动能力,复杂度也增大,其它元素也面临同样的问题,将之拆成若干部分成为一 种方法,如 BANK,BUFR 的引入。等到了 V7,发现这样还不够解决问题,又 引入了 SLR 概念,6 个 BANK 构成个 SLR,里面的结构就如同一块 V6 芯片了 (如上下部分

我要回帖

更多关于 vivado 布线失败 的文章

 

随机推荐