赛灵思中国通讯第46期

Page 1

赛灵思 第 四 十 六 期

2 0 1 2 年

冬 季 刊

中 国 通 讯 Xilinx News I s s u e

4 6 ,

W i n t e r

2 0 1 2

赛灵思利用 All Programmable 器件领先一代 Vivado HLS 简化浮点 PID 控制器设计 使用 Zynq-7000 SoC 实现图像传感器色彩校正 利用赛灵思 Vivado HLS 实现浮点设计

请即浏览赛灵思中国通讯 网络版的全部精彩内容 www.xilinx.com/cn/xcell46


行業首款面向開源社區的

ZynqTM -7000 ALL PROGRAMMABLE SOC 開發套件

特性: u Zynq-7000 XC7Z020-CLG484-1 u 存儲器 u 512 MB DDR3 u 256 Mb Quad-SPI Flash u 4 GB SD 卡

ZedBoard是一款基於賽靈思ZynqTM-7000器件的低成本開發板,也是 行業首款面向廣大開源社區的ZynqTM -7000 ALL PROGRAMMABLE

u 板載 USB-JTAG 編程 u 10/100/1000 以太網 u USB OTG 2.0 和 USB-UART

SOC開發套件。開發板為基於Linux、安卓、Windows或其它操作系

u PS & PL I/O 擴展 (FMC, PmodTM, XADC)

統/實時操作系統的設計開發提供了所需的一切。另外,該平臺提供

u 支持多顯示器 (1080p HDMI, 8-bit VGA, 128 x 32 OLED)

數款擴展連接器,便於用戶訪問處理系統和可編程邏輯。Zynq-7000

u I2S 音頻編解碼器

系列緊密集成了ARM ®處理系統和7系列可編程邏輯,充分利用它們 的優勢,並結合ZedBoard可以開發出獨樹一幟且功能強大的設計。 為推動ZedBoard套件的創新分享和交流,安富利公司還專門打造了 www.zedboard.org開源社區,用戶可以通過這個社區與其他同樣從 事Zynq設計的工程師開展各種各樣的協作。

目標應用: u 視頻處理 u 電機控制 u 軟件加速 u Linux/Android/實時操作系統開發 u 嵌入式 ARM® 處理

套件組成部分: u u u u u u u

u 通用 ZynqTM -7000 原型設計

Avnet ZedBoard 7020 基礎板 12 V AC/DC 電源 4 GB SD 卡 Micro-USB 電纜 USB 適配器: Micro-B (公頭)對 Standard-A(母頭) 入門指南 ISE® WebPACKTM, 配器件專用 ChipScope 許可證

價錢 : USD$ 395.00 型號 : AES-Z7EV-7Z020-G 更多關於ZedBoard的信息,請訪問: http://www.zedboard.org 或聯繫以下安富利辦事處

北京:010-8206 2506

重慶:135-9422 8267

上海:021-3367 8387

西安:029-8832 8891

武漢:027-8732 2719

瀋陽:024-8290 2597

南京:025-8483 8138

廣州:020-2808 7301

成都:028-8652 8262

青島:0532-8097 0718

杭州:0571-8580 0667

深圳:0755-8378 1886

廈門:0592-516 2777

香港:00852-2212 7848

蘇州:0512-6956 7753

www.em.avnetasia.com Copyright © 2012 Avnet Electronics Marketing



封面专题

封面专题

利用 All Programmable 器件领先一代 赛灵思在 28nm 节点上率先推出了 All Programmable 3D IC 和 SoC,推出了创新型低功耗 FPGA,并打造出了新的工具套件, 使赛灵思领先整整一代。

2

赛灵思中国通讯 46 期

2012 年冬季刊


封面专题

作者: Mike Santarini 赛灵思 Xcell 杂志

mike.santarini@xilinx.com

灵思在 28nm 节点上推

作 效 率, 还 有 一 个 目 的 是 为 了 满 足 今 后

出的多种新技术为客户

10 年内 All Programmable 器件的可扩展

带来了重大的超前价值,

性要求。

并使赛灵思领先竞争对

有 的 FPGA 架 构 迁 移 到 新 的 技 术 节 点

ZYNQ-7000 ALL PROGRAMMABLE SOC Zynq-7000 All Programmable SoC

上,而是力求引领多种 FPGA 创新,并

(片上系统)是首批推出的新型产品,它

率先推出了 All Programmable 3D IC

获得了《EE Times》杂志评选的年度创新

和 SoC。

大奖 ,是一款改变业界格局的重要产品。

手 整 整 一 代。 赛 灵 思 并 不 是 简 单 地 将 现

今天推出的 All Programmable 产品采 用了各种形式的可编程技术,包括可编程 硬 件 和 软 件、 数 字 信 号 和 模 拟 混 合 信 号 (AMS)、单晶片和多片 3D IC 方案(图 1)。 有了这些全新的 All Programmable 器件, 设计团队就能进一步提升可编程系统的集 成度,提高整体系统性能,降低 BOM 成本, 并以更快的速度向市场推出更具创新性的 智能产品。 2008 年,赛灵思在新任 CEO Moshe Gavrielov 的领导下开始对产品系列实施转 型。赛灵思启动了一套全面战略,用以扩 展技术组合,扩大市场范围,并引入了最 先进的 28nm 节点技术。其中,赛灵思实 验室和产品设计团队经过多年原型设计和 评估而开发出的两种全新器件也即将投入 量产。公司还同台积电合作推出了全新的 28nm 芯片工艺。这种被称为 HPL(含义 是 高 性 能、 低 功 耗) 的 新 工 艺 实 际 是 为 FPGA 量身打造,具有最佳的高性能和低 功耗特性。赛灵思认识到功耗是客户的首 要关注点,因此整个 All Programmable 产

2012 年冬季刊

All Programmable SoC 整合了 3 种适用 于大规模定制化的可编程功能,分别是硬 件、软件和 I/O 可编程性。赛灵思已经推 出了数代采用片上软核与硬核处理器的 FPGA 产品,在此基础之上并结合多年来 广泛收集的客户反馈,最终形成了 Zynq7000 All Programmable SoC 产品理念。 从上世纪 90 年代末开始,赛灵思和 竞争对手都推出了软处理器内核,客户可 将这种内核综合到 FPGA 逻辑结构中。这 样,设计团队就能在统一的架构中将处理 与 逻 辑 功 能 紧 密 整 合, 从 而 进 一 步 降 低 BOM 成本。在实践中,许多软处理器都被 用于嵌入式状态机,而不是运行在更为复 杂的操作系统和软件堆栈系统中。2005 年 左右,新的半导体工艺使得 FPGA 厂商能 够推出更高容量的器件,于是厂商开始将 硬处理器内核与 FPGA 逻辑配合使用,从 而显著改善了 FPGA 的处理性能。例如, 赛 灵 思 先 后 推 出 的 Virtex®-4 FX 和 Virtex-5 FX 系列都在 FPGA 逻辑中嵌入了 PowerPC® CPU 内核。

品线都采用这种先进的工艺制造(见 Xcell

Virtex FX 系列相对于软实现方案大幅

杂志 第 41 期封面报道 )。赛灵思还组建

提 高 了 处 理 器 性 能, 设 计 团 队 要 先 对

了一只顶级的 EDA 设计团队来开发全新的

FPGA 逻辑进行编程才能对处理器编程。

现代化设计套件,其目标不仅是为了提高

一旦 FPGA 逻辑进行了编程,设计团队就

客户在使用 5 个 28nm 器件系列时的工

需要创建自己的外设、存储器子系统并最 赛灵思中国通讯 46 期       3


封面专题

Portfolio: All Programmable FPGAs, SoCs, and 3D ICs Available Today

All Programmable

SoC ■ First shipped: Q4, 2011 ■ Integrating FPGA, CPU,

All Programmable

DSP, AMS

FPGA Family

■ Competitor silicon

not available

■ First shipped: Q1, 2011 ■ Delivering one extra node

of power and performance All Programmable

3D ICs ■ First shipped: Q3, 2011 ■ Integrating 2x logic and

serdes bandwidth ■ Competitor working only

on test chips

图 1:赛灵思超越逻辑范畴在 28nm 节点上对“可编程性”进行扩展,推出了一系列 All Programmable 器件。

终创建“嵌入式系统”和相关的进出逻

架构设计,使其能够从处理器直接启动,

之后几个小时之内就让设计方案成功运

辑的管道。熟悉 FPGA 设计的专家设计

这样系统设计人员就能以熟悉的方式开

行。今天,Zynq 的需求跟其它赛灵思

团队当然希望实现处理器性能的提升,

展工作,帮助设计团队尽快启动软件开

FPGA 系列一样高,大多数应用都集成

不过这种架构相对于更受欢迎的传统嵌

发工作,从而加快产品上市进程。由于

了不同 CPU、DSP、FPGA 和 AMS 组

入式系统设计方法而言更复杂。在此经

处理器首先启动,所以软件设计人员即

件 中 使 用 的 系 统 功 能。 如 欲 了 解 关 于

验基础上,赛灵思于 2008 年开始进行

便不熟悉 FPGA 逻辑或硬件设计也能开

Zynq-7000 All Programmable SoC 的更

Zynq-7000 All Programmable SoC 的架

始使用器件,或许还能扩展编程范围。

多详情,敬请参阅 2011 年 3 月第 40 期

构设计,同样重要的是,公司还开始设

赛灵思还为 Zynq-7000 提供了丰富的外

赛灵思中国通讯的封面报道 。截至 2012

计相关的生态系统,包括固件和软件开

设 IP 核以及可编程的高速 I/O,不仅能

年 9 月,已有一家公司宣布了推出竞争

发工具以及基础设施,从而协助器件的

为客户带来 FPGA 和处理器,而且能实

性器件的计划,但还没有宣布交付芯片,

编程工作。

现真正的 All Programmable SoC。

而且也没有成规模的生态系统为其提供 足够的支持。

对 Zynq-7000 All Programmable

赛灵思于 2010 年推出该架构,有

SoC 而言,赛灵思选择了非常受欢迎而

力推动了客户和生态系统合作伙伴的产

且得到很好支持的 1-GHz ARM® A9 双

品开发工作。公司于 2011 年冬天向客

核处理器系统,并协同 ARM 创建 AXI4

户推出首款 All Programmable SoC。某

赛灵思率先在 28 nm 工艺节点上推

接口标准,在架构的逻辑部分实现第三

家公司作为最早获得该产品的客户之

出 的 另 一 类 全 新 器 件 就 是 所 谓 的“All

方、赛灵思和客户开发的内核的即插即

一一年多以来一直在用 Zynq 仿真平台

Programmable 3D IC”。早在 2004 年,

用。此外,赛灵思还对 Zynq 系列进行

进行设计方案的定义和开发,收到芯片

赛灵思实验室就开始探索多芯片在统一

4

ALL PROGRAMMABLE 3D ICS

赛灵思中国通讯 46 期

2012 年冬季刊


封面专题 IP 配置中的堆栈,并最终推出了原型设 计,以突破摩尔定律的限制,开创可编

赛灵思实验室就开始探索多芯片在统一 IP 配置中的堆栈,并最终推出

程系统集成的全新高度。赛灵思的科学 家创建了各种 3D IC 架构的测试芯片, 探索堆栈芯片的各种方法,并通过 TSV

了原型设计,以突破摩尔定律的限制,

给芯片供电,支持芯片间通信。通过广 泛的原型设计,并致力于可靠的制造,

开创可编程系统集成的全新高度。

该公司判定近期商业上可行的最实用架 构就是赛灵思的 SSI 技术。就此架构而 言,多芯片在无源硅中介层顶部并行放 置,有助于多芯片之间的互联和通讯。 芯片通过编程可支持超过 10000 个互

2012 年夏季,赛灵思推出了面向通

此外,赛灵思的 3D IC 技术将帮助客户 在市场成型之初就能开始 400G 应用的

联,而且每个芯片和 I/O 都具有可编程性,

信 市 场 的 三 款 异 构 All Programmable

开发工作,并获得显著的市场优势,甚至

这样赛灵思所推出的就不光是首款商业

3D IC 中的首款产品:Virtex-7 H580T(参

有望比同类竞争对手整整领先一代技术。

3D IC,而是首款 All Programmable 3D

见赛灵思中国通讯第 45 期的封面报道 )。

IC 了。如欲了解关于 SSI 技术的更多详

Virtex-7 2000T 是一款同质 3D IC,其

Programmable 器件又一个遥遥领先于

情,敬请参阅第 77 期 Xcell 杂志 的封

所有四个芯片 /slice 都主要由 FPGA 逻

同类竞争解决方案的系列。虽然近期有

面报道。

辑构成,而 Virtex-7 H580T 则是首款异

一家公司宣布同台积电代工厂合作生产

构 3D IC。

了测试芯片,但该公司还没有公开宣布

2012 年初,赛灵思为客户推出首款

All Programmable 3D IC 是 All

面向客户推出样片或量产器件。

3D IC。Virtex-7 2000T 器件并行协议栈

为了推出 Virtex-7 H580T,赛灵思

4 个 FPGA 逻辑 slice。该器件建立了一

在无源硅中介层上将专用的 28G 收发器

项 28nm 工艺节点上 IC 晶体管数量的

芯片与两个 FPGA 芯片并行放置。这样

新纪录(超过 68 亿个晶体管),也突

一来,赛灵思推出的器件就能提供 8 个

自 赛 灵 思 推 出 业 界 首 款 FPGA

破了 FPGA 逻辑容量的记录,可提供

28-Gbps 收发器、48 个 13.1-Gbps 收

(1985 年推出相当于 1000 个 ASIC

200 万个逻辑单元(相当于 2 千万个

发器和 580k 逻辑单元。对于基于 CFP2

门的 XC2064)以来,FPGA 已经取得

ASIC 门)。该器件的尺寸相当于同类竞

光学模块的 2x100G 光学传输线路卡等

了长足的发展。最早的 FPGA 定位于门

争器件最大型 FPGA 尺寸的两倍,其逻

应用而言,Virtex-7 H580T 不仅可将材

阵列和 ASIC 的替代品,主要用作“粘

辑容量比该工艺节点上通常预期的水平

料清单成本锐减五分之一,还能相对于

性逻辑”,协助两个最初设计不相互通

整整领先了一代。此外,该 SSI 技术架

上一代实现方案而言显著减少板级空间。

信的器件进行对话,此外也能在设计最

构还帮助赛灵思提供的容量超越了摩尔 定律设想未来新一代的产品水平。

Virtex-7 H580T 只是赛灵思 28nm 系 列 中 推 出 的 首 款 异 构 3D 器 件。

ALL PROGRAMMABLE FPGA

后时刻为大型 ASIC 补充此前缺失的 功能。

Virtex-7 H870T 器件在同一芯片上集成

时 光 快 进 到 当 下, 显 然, 现 代

并广泛应用在包括 ASIC 原型设计、存

了 2 个八通道收发器芯片以及 3 个

FPGA 产品已经远远超越了门阵列的水

储和高性能计算系统在内的各种设计应

FPGA 逻辑芯片,从而实现了在一个芯

平。今天的 All Programmable FPGA 不

用中。这些应用都需要业界能够提供的

片上总共有 16 个 28-Gbps 收发器、72

仅包含数百万个可编程逻辑门,还嵌入

最高容量的可编程逻辑。不过,赛灵思

个 13.1-Gbps 收发器和 876,160 个逻辑

了存储器控制器、高速 I/O 以及模拟 /

还进一步扩展了其 3D IC 技术,能够充

单元。Virtex-7 H870T 器件可全面支持

混合信号电路系统。就过去的 FPGA 而

分满足通信市场中最高性能的应用需求,

新一代有线通信,也就是 400G 市场。

言,设计团队能用它解决系统中的问题,

Virtex-7 2000T 器件深受客户欢迎,

整整领先同类竞争解决方案一代的水平。

2012 年冬季刊

赛灵思中国通讯 46 期       5


封面专题

图 2:客户设计显示相同性能水平下的功耗平均比竞争对手降低 35%。

或者把系统元素“粘合”在一起。而就

能和集成度方面领先对手一代的水平,

类性能的竞争产品而言能将功耗降低

今天的 All Programmable FPGA 而言,

二是功耗降低再领先一代的水平,三是

35% 到 50%,在用电效率上领先了整整

能够帮助客户创建高性能数据包处理、

串行解串器大跃进实现最低抖动和无与

一代的水平(图 2)。赛灵思的 28nm

波形处理、图象 / 视频处理或高性能计

伦比的通道均衡,四是新一代工具套件

FPGA 还实现了无与伦比的高性能和高

算功能,而且能在系统中进行动态重编

为 未 来 的 需 求 提 供 高 效 率、 结 果 质 量

集成度(图 3)。系统性能和集成度(包

程,也能在产品部署后进行升级。

(QoR)和可扩展性优势。

括 BRAM、DSP、存储器接口、收发器 和逻辑元件的集成)都超越竞争对手 1.2

赛灵思在 All Programmable SoC

事实上,赛灵思已经实现了上述所

和 3D IC 市场中还没有遇到过竞争对

有 目 标, 于 2011 年 3 月 推 出 了 首 款

手,要是能在传统的 FPGA 市场中领先

28nm 系列产品 Kintex ™ -7 K325T(同

竞争对手整整一代的水平当然也是一个

时也是首款中端产品)。赛灵思实际上

巨大的成就。为了实现这个目标,赛灵

是整个半导体产业中首个推出 28nm 芯

FPGA 还可提供竞争对手所没有的特性。

思 制 定 了 一 个 明 确 的 战 略, 首 先 推 出

片的企业。赛灵思决定基于 台积电 的 HPL

举例来说,所有赛灵思的 28nm FPGA

28nm 的 FPGA 芯片,通过扩展组合涵

工艺实施全系列 28nm All Programmable

都包含灵活混合信号模块,通过支持在

盖低端、中端乃至高端产品的各种不同

器件,而且为进一步降低功耗采用关键

FPGA 中实现的模拟系统功能(而不是

要求。赛灵思还制定了区分所有 28nm

的架构创新,这使得公司目前为客户提

采用外部分离式的模拟器件)进一步降

工艺芯片特色化的目标,一是在系统性

供的 All Programmable FPGA 产品对同

低材料清单成本。

6

倍到 2 倍,平均优势达 1.5 倍,也相当 于领先整整一代的水平。 此外,赛灵思的 All Programmable

赛灵思中国通讯 46 期

2012 年冬季刊


封面专题

核拼接以及高速验证。为了进一步加快 产品上市进程,提高设计抽象化水平, Vivado 支持基于 C 设计和验证的流程, 能通过高层次综合和自动化 AXI 接口生 成来加速从 C 到 RTL IP 的创建和集成 速度。这样,Vivado 不仅加速了实现速 度,也在设计前端加快了 C 到 RTL 的 集成速度。 总结 赛灵思如今开发了各种形式的可编 图 3:赛灵思的 28nm FPGA 相对于竞争对手而言在性能和集成度方面领先了整整一代的水平。 公司已经交付了其所有规格的 All Programmable 器件,而且量产器件均没有勘误表。

程技术,超越了可编程硬件而涵盖软件 领域,超越了数字而涵盖 AMS,超越单芯 片而涵盖多芯片 3D IC 实施方案。赛灵思 将这些技术整合到 All Programmable

Altera Quartus Traditional RTL-based IP integration with fast verification

Decade-old implementation, database and engines

FPGA、SoC 以及 3D IC 中,可帮助设 计团队提高可编程系统集成度,改进整

Xilinx Vivado C- and standards- based IP integration with fast verification ■

More than 100x faster C verification

■ More

than 4x faster C to verified RTL

■ 3-100x

faster RTL simulation and hardware co-simulation

■ 4-5x

faster IP reuse and time to IP integration

Hierarchical implementation and advanced closure automation ■

28nm

Productivity Advantage

More than 4x faster design closure

体系统性能,降低材料清单成本,并加 快向市场推出创新型产品的速度。赛灵 思产品组合的变革转型可追溯到 2008

■ More

than 3x faster incremental ECO

✔ Up to 4x faster time-to-market

■ 20%

better LUT utilization

✔ Up to 3x faster speed grades

年, 部 分 创 新 技 术 则 能进 一 步 上 溯 到

✔ One-third less power

2006 年,其成果则是如今的产品组合技

■ Up

to 3 speed grade performance advantage

■ ~35%

average power advantage at the same performance

术已整整领先竞争对手一代,为客户带 来更大价值。

图 4:赛灵思的 Vivado 为设计人员带来一流的设计套件,大幅提升生产力, 大幅加速产品上市进程。

放眼 20nm 工艺节点,赛灵思将推 出更先进的 FPGA、第二代 SoC 以及 3D

采用 VIVADO 提升生产力 为了提高设计人员采用 28 nm 及其 更高 All Programmable 器件的生产力, 赛灵思还全新开发了新一代设计环境和

线性和资源利用率提升了 20% 以上,集 成和实现速度翻了两番之多。如欲了解 关于 Vivado 的更多详情,敬请参阅赛灵

思中国通讯第 44 期的封面报道 。

IC 产品,进一步扩大领先地位,同时还 将推出 Vivado 设计系统,使赛灵思的技 术水平始终领先一代之遥。赛灵思开始 同客户协作提升 SoC 和 3D IC 技术的

工具套件 Vivado ™(图 4)。开发工作

Vivado 对支持新型 All Programmable

举措领先竞争对手多年,重新定义了高

耗时 4 个日历年以上,凝聚 500 人多年

器件组合、实现可编程系统高度集成发

速串行收发器等关键核心技术的开发和

的努力。没有这款设计套件,设计团队

挥着至关重要的作用。因此,我们关注

交付,提高了设计方法和工具,扩展了

就不能有效地发挥赛灵思 3D IC 的潜力。

的重点大大超越了加速实施流程和

系统级生态系统和供应链,并确保其质

对 FPGA 和 SoC 而言,Vivado Design

QoR、利用尖端分析引擎和关闭自动化。

量和可靠性。

Suite 将设计质量结果提升了三个速度等

为了实现出色的集成度,Vivado 支持分

级,将动态功耗降低了高达 50%,可布

层架构、IP 核封装和重用、自动化 IP

2012 年冬季刊

赛灵思中国通讯 46 期       7


视频领域的出色表现

视 频 领 域 的出色 表现

使用 Zynq-7000 All Programmable SoC 实现图像传 感器色彩校正 作者: Gabor Szedo, 赛灵思公司高级视频设计工程师 Gabor.szedo@xilinx.com Steve Elzinga, 赛灵思公司视频 IP 设计工程师 Steve.elzinga@xilinx.com Greg Jewett, 赛灵思公司视频市场营销经理 Greg.jewett@xilinx.com

8

赛灵思中国通讯 46 期

2012 年冬季刊


视频领域的出色表现

赛灵思图像 / 视频处理内核和套件 为相机开发人员提供了完美的原型 设计平台。

P=∫ ∞ 0 I(λ)R(λ)S(λ)dλ

像视频传感器广泛用于手机、 视频监视产品、汽车以及导 弹系统等各种应用。几乎所

有这些应用都要求白平衡校正(也称为 色彩校正),以便生成无论是在日光、 白炽灯、荧光灯下还是其它光照条件下 都会产生与人眼视觉相一致的图像色彩。

您可观察自然光以及火焰、白织灯 要得到有彩色图像,摄影与摄像设 备与人眼一样,均使用有不同光谱响应 的相邻传感器。人的视觉依赖三类光敏 视椎细胞来形成色彩知觉。在开发基于 人类感知的色彩模型时,国家照明委员 会(CIE)定义了三个色彩匹配函数:x

对 以前 使 用 ASIC 或 ASSP 器 件 的 众多开发人员来说,现在用赛灵思 FPGA 或 ZynqTM-7000 All Programmable SoC 这样的可编程逻辑器件来实现自动白平 衡校正可能会是一个全新的挑战。首先让

(λ)、y (λ) 和 z (λ)。这三个函数可视 为三个线性光检测器的光谱敏感度曲线。 三个线性光检测器可产生 CIE XYZ 三色 激励值 Px、Py 和 Pz,这三个值也被统 称为 CIE 标准观察者。

我们看一下运行在嵌入式处理器上的软件 (如运行在 Zynq-7000 All Programmable SoC 上的 ARM9 处理系统)是如何控制

测量三色刺激值。一种方法是在固有的

定制图像 / 视频处理逻辑来执行实时像

单色光敏二极管上加一组滤色片阵列;

素级色彩 / 白平衡校正的。

另一种方法是使用堆叠光敏二极管测量

要测量一个自身不发光或不透光的

彩恒常性”。但是,如果相机不具备针 对不同光源进行调整或自动补偿的功能, 获得的色彩就会发生变化。而相机对这 种情况进行校正的行为,就称为白平衡 校正。 图 1 右侧的等式分别用于描述光源 的光谱、场景中各种物质的反射特性以

定最终的色彩测量。因此即便是采用相 同的检测器,测量结果还是会把物体固 有的色彩与光源的光谱混合在一起。只 要满足下列条件,就有可能实现白平衡, 或者说将固有的反射特性 R(λ) 与光源 的光谱 I(λ) 分离:

但这两种方法都不能产生与人眼相

设备的色彩测量值存在差异,即在拍摄 具有相同 (Iλ) 和 (Rλ) 的相同场景,图

小型均匀表面物体反射光的色彩和强度,

像传感器的测量值与观测者的目测值之

取决于三大函数:光源的光谱功率分布

间也存在差异。

(I(λ))、 表 面 材 质 的 光 谱 反 射 特 性

色。这种现象被称为“颜色适应”或者“色

正比。

似的响应。因此,不同的光检测和复制 相机校准

发现人的视觉都会认为物体有相同的颜

光子吸收深度,这个深度与波长 λ 成 需要了解色彩知觉和相机校准这些基本 概念。

或荧光灯等不同光照条件下的任何物体

及检测器的光谱敏感度。这三者共同决 数字图像传感器主要采用两种方法

要了解是如何实现这一功能,首先

白平衡

因此,相机校准的目的是转换和校

• 采用启发法,比如光源上的空间 频率限制,或者先验性地知道物 体的色彩。例如,在日光下拍摄 场景时,可以预计光源的光谱特 性将在整个图像上保持恒定。与 此相反,如果将图像投影到白屏

(R(λ))、成像系统的光谱敏感性 (S(λ))。

正相机或图像传感器测得的三色刺激值,

幕上,光源的光谱特性会随像素

检测器测量到的信号功率可表达为:

实现与 CIE 标准观察者相符的光谱响应。

发生显著的变化,但场景(幕布)

2012 年冬季刊

赛灵思中国通讯 46 期       9


视频领域的出色表现

图 1 - “标准观察者”的光谱响应

的反射特性保持恒定。如果光源

就是依据冯 • 克里斯假设 [1]。这种方法

的特性和发射特性均有显著的变

旨在将色彩转换为 LMS 色域,然后每个

化,就难以将场景中的物体和光

通道仅使用三个乘法器便可进行校正。

源区分开来。

该假设假定通过单独调整三种视椎细胞

L' M' S'

kL 0 0

0 kM 0

0 0 kS

L M S

反应的增益,就可以实现人视觉系统的

在实际实现中,使用 RGB 色域替

色彩恒定性。这三种视椎细胞反应的增

代 LMS 域来调整通道增益。一种颜色(以

益取决于感知环境,即色彩历史和周边

白色为代表)通常用相等的 R、G、B 值

外物体的任何反射特性信息。例如,

环境。两个辐射光谱 f1 和 f2 的视椎细胞

来表示。但是,针对某种色彩调整感知

如果场景中用单色红光源照明,蓝

反应可以通过适当选择对角适应矩阵 D1

视椎细胞反应或 R、G、B 值不能保证其

色物体和绿色物体都会是黑色。

和 D2 来 匹 配, 即, 使 得 D1•S•f1 =

它色彩也得到如实表达。

• 检测器的敏感度 S(λ) 和光源光谱 I(λ) 在观测的光谱范围内不会为 零。观测者无法获得光源光谱范围

D2•S•f2,。其中 S 为视椎细胞敏感度矩阵。 在 LMS(长中短波敏感视椎细胞反应域)

早期方法 在数字成像系统中,已知光源的相

对任何特定的色彩分量,冯 • 克里

中,有:

斯假设只能表达输入和输出之间的线性

机校准问题可以表达为一个离散三维向

L /L D = D1–1D2 =

量函数:

2

0

1

0 M2 /M1

0

0

0 0 S2 /S1

关系。假设用相似的数据表达(比如每 分量 8 位、10 位或 12 位),除非 k 等 于 1.0,否则部分输出动态范围就无法使

_'=F(x) x

用,或者部分输入值对应于需要剪切或

这种方法的优势在于相对简单,易 其中 F(x) 为映射向量函数,x 为 R、 G、B 主要色彩分量的离散向量(一般 为 8 位、10 位或 12 位)。根据是否要

钳位的值。除了使用乘法器,还可以使

于实现,仅使用三个并行乘法器,并将

用小规模的基于分量的查找表来表达任

其作为数字图像传感器或图像传感器流

何定义输入 / 输出映射的函数。这样在

水线(ISP)的一部分:

进行线性映射以及是否要独立校正色彩

线性

非线性

非独立校正

冯 • 克里斯

分量校正

独立校正

色彩校正矩阵

完整查找表

分量,该映射函数可按照表 1 分类。 冯 • 克里斯假设

分量校正

相机校准最简单也是最常用的方法 表 1:相机校准方法

10

赛灵思中国通讯 46 期

2012 年冬季刊


视频领域的出色表现 一个模块中就可以实现传感器 / 显示器

像或视频处理系统均受制于对外部存储

同的颜色,场景颜色的平均值(红、绿、

的非线性与伽马校正。在采用 FPGA 图

器的访问带宽。大型查找表要求使用外

蓝三种颜色的平均值)应该是中性的灰

像处理流水线实现方案中,可以使用赛

部存储器;逐像素访问需要很高的带宽;

色。因此,一帧中 R、G、B 平均色值之

灵思伽马校正 IP 模块来完成这一运算。

而且查找表内容是静态的(难以逐帧重

差能体现出光源的颜色信息。校正的作

新编程),会限制完整查找表解决方案

用是进行色彩转换后使得到的平均色值

在嵌入式视频 / 图像处理应用中的实际

完全相同。灰度世界算法相对容易实现。

使用。

但是如果场景中出现大型运动物体,这

完整查找表 相机校准可为所有可能的相机输入 三色刺激值分配预期值。我们可以将所 有可能的输入 RGB 值预期值存储在一个

种方法就会产生严重误差,导致原生的 色彩校正矩阵

大型查找表中,但这种方案有两个弊端。 第一个问题是内存大小。对 10 位的色彩

您演示如何采用 3×3 矩阵乘法器进行坐

分 量 而 言, 这 个 查 找 表 将 达 到 230 字

标转换,旨在让测得的红、绿和蓝三种

(4GB)的深度,30 位的宽度。第二个

色彩分量正交化。这种方法与冯 • 克里

问题是初始化值。一般来说,通过校正

斯方法相比的优势在于所有三个色彩通

测量,只能建立数十到数百个相机输入

道都参与了校正过程。比如,在调整绿

值 / 预期输出值对。其余稀疏的查找表

色通道增益时,可以结合红色通道和蓝

值必须通过内插得到。这种内插工作并

色通道的信息。另外,这种方法还适合

不轻松,因为异构分量输入到输出函数

用同一模块同步进行相机校准和白平衡

并非是单调或平滑的。图 2a 所示即为 R、

校正,并逐帧更新矩阵系数以平滑匹配

G、B 输入(行)输出(列)值的测量

不断变化的光源。

值与预期值对。 通过对内插得到的经验结果进行视 觉评估(图 2b),结果表明内插法与基

白点算法 [2] 依据这样的假设,即图 像中颜色最浅的像素必定是白色或浅灰 色。红色、绿色和蓝色通道最大值之间 的差值提供的是与光源颜色有关的信息, 校正的作用是进行色彩转换后让得到的 颜色最大值完全相等。但是,要找出白点, 就需要按亮度值对像素排序。另外可能 还需要对排序后的列表进行时空滤波, 抑制噪声伪影,最后将排序结果汇聚成 唯一的白色三元色。使用白点法的优势 是易于实现,缺陷则是会造成巨大的误

白平衡校正使用的两种最简单的算

差, 可 能 导 致 原 生 场 景 的 色 彩 掉 色。

法是灰度世界算法和白点算法。这两种

另外这种方法的效果还容易被饱和像

方法均使用 RGB 色域。

素削弱。

于伽马校正和色彩校正矩阵的解决方案

灰度世界算法 [2] 依据这样的启发条

更加先进的方法发挥色域转换的优

相比并没有明显的质量改进。大多数图

件,即虽然场景中的不同物体有截然不

势。这样色度可以轻易地与色彩饱和度

图 2a - R、G、B 测量值与映射预期值的对比

场景色彩掉色或变化。

我们在本文中介绍的校正方法将向

2012 年冬季刊

图 2b - 作为 R、G、B 输入对应的 R 分量输出

赛灵思中国通讯 46 期       11


视频领域的出色表现

图 3 - 典型图像传感器流水线

和亮度隔离,将三维色彩校正问题降低

用于相机校准和色彩校正的 ISP

还有一种色彩校正方法就是将前景

我们的实现方案采用如图 3 所示的

和背景分离。数码相机采用的自动对焦

典型图像传感器流水线技术。我们采用

与矩阵测光相结合的方法,可以把镜头

赛灵思基于可配置逻辑的图像处理内核

中心焦点周边的像素与靠近边缘的背景

来构建 ISP 的硬件部分(见蓝色方框)。

建 立 一 个 凸 壳。 计 算 出 UV 或(Cr,

像素在空间上区分开来。这种方法假定

同时,我们将相机校准和白平衡算法设

Cb)均值,用于校正色彩,让得到的色

拍摄的物体只有几种主要颜色,而且位

计为运行在其中一个嵌入式 ARM 处理器

彩 UV 或 CbCr 直 方 图 位 于 YUV、

于图像中心的焦点上。远处的物体靠近

上的 C 代码(见粉红色方框)。该 ARM

YCC、Luv 或 Lab 域中的中性点或灰度

边缘,由灰度世界假设主导。

处理器还运行嵌入式 Linux,为主机 PC

为一维问题。 例如,先进行色彩饱和度映射,在 YCC、YUV、L*a*b* 或 LuV 色域中建立 二维直方图,然后围绕直方图底部周边

点上。这些方法的优势在于能够得到更

另 一 种 方 法 围 绕 形 状 检 测。 面 部

好的色彩表象,而缺陷则在于需要浮点

或皮肤颜色检测有助于相机识别有预

算法才能实现。

期色调的图像内容。这样只需要对有

所有上述的方法有一个共同的缺陷, 就是如果曝光设置不当或者场景光照存 在极度的动态范围,就会产生伪影。例 如使用带原生色调的高亮光源照明,在 图像中产生的饱和像素。典型如火焰位 于焦点上的烛光照片,此时会导致完全 饱和,图像上出现白色像素。

其它改善白平衡结果的方法

12

提供用户界面。 ISP 中与白平衡和相机校准有关的部 分是一个反馈环路,包括:

已知和预期的色调的像素进行白平衡 校 正。 颜 色 校 正 就 是 将 这 些 像 素 的 颜 色调整为贴近预期颜色。这种方法的 不足之处就是分割和识别逻辑的成本 不菲 。 大多数商业应用采用适应图像内容和 拍摄环境的策略,综合应用多种方法。[2]

• 图像统计模块,用于逐帧采集各域 的统计数据; • 嵌入式驱动程序和应用软件,用于 逐帧分析统计信息并对色彩校正模 块编程; • 色彩校正模块,用于逐像素地执行

赛灵思中国通讯 46 期

2012 年冬季刊


视频领域的出色表现 (Re、Ge、Be)对应的平均 RGB 三元色。

色彩转换。 我们将该 ISP 实现为 Zynq 视频和

我们采用模拟退火优化法找出色彩校

成 像 套 件(ZVIK)1080×60 相 机 图 像

正系数和偏移量。然后使用图 3 的色彩校正

处理参考设计的组成部分。

模块,将未经校正的(R、G、B)三元色转

算法详解

换为校正的(R’、G’、B’)三元色。

为校准传感器的颜色,我们使用现 成 的 颜 色 观 察 箱(X-Rite Macbeth Judge II)或灯箱。该设备有四个已知光

的是求出误差函数的最小值,从而在所 使用的所有色标上实现理想的误差分布。 我们设置的误差函数用于计算下列 参数之一: • RGB 色域中预期三元色和转换后 三元色之间的方差和:

k11 R' G' = k21 k B' 31

k12

k13

22

23

k k

32

k k

33

Roffs R G + Goffs Boffs B

E=∑k=0 (Rk'–Rek)2+ (Gk'–Gek)2+Bk'–Bek)2 n

谱的标准光源,分别用于模拟日光、冷白

• RGB 色域中预期三元色和转换后

荧光灯、暖光荧光灯和白炽灯。我们还使

模拟退火算法的作用是求出一个能

用现成的色靶(X-Rite ColorChecker 24

够返回标量的误差函数的最小值。在下

色标准色卡),其色标具有已知的反射

面的讨论中,用 Rk、Gk、Bk 表示测得的

特性以及 RGB 与 sRGB 预期值。

色标像素值的子集或超集。用户可以自行

在开始实现相机校准算法之前,我 们首先将色靶放置在灯箱中,与灯箱的灰 黑色背景平行。我们将色靶调整到一定 位置,让来自所有光源的光照尽量均匀。

三元色之间的绝对差和:

E=∑k=0 |Rk'–Rek| + |Gk'– Gek|+|Bk'–Bek| n

• YUV 色域中预期三元色和转换后

限制包含在优化(子集)中的色标数量,

三元色之间的方差和:

也可多次使用某个特定的色标,以增大其

E=∑k=0 (Uk'–Uek)2+ (Vk'–Vek)2 n

在优化过程中的相对权重。整数 n 代表 选优化的色标数量。如果一次优化全部

• YUV 色域中预期三元色和转换后

色标,则对 X-Rite ColorChecker 24 色 接下来,在打开所有光源的情况下, 我们采集由传感器拍摄的有待校准的图 像,此时尚未进行色彩校正(使用“跳过” 色彩校正设置:将单位矩阵加载至色彩

标准色卡而言,n 则为 24。

量(CCM 系数和偏移量),一般来说不

期色标值的解决方案。不过该算法的目 然后使用赛灵思提供的

E=∑k=0 |Uk'–Uek| + |Vk'– Vek| n

因为优化算法最多只能设置 12 个变

存在有能够将所有测量值精确映射到预

校正矩阵)。

三元色之间的绝对差和:

其中 U’和 V’对应的是 R’G’B’ 值转换到 YUV 色域的值。与此类似,误

MATLAB®

脚本协助补偿镜筒(几何形状)透镜畸 变和镜头阴影(光强度在角落处下降) 带来的影响。我们使用 MATLAB 脚本找 出图像上的控制点,然后弯曲图像,用 以对筒形畸变进行补偿。脚本的其余部 分用于根据寄存的 ColorChecker 色靶背

න࠼

ૐӣᆑ࠼‫ڨ‬

景来估算水平和垂直方向的光强度下降。 为衰减测量到的噪声,我们在色标 中划出矩形区域。在这些区域中,我们 计 算 出 R、G、B 像 素 数 据 均 值, 用 RGB 三元色表达每个色靶。带 GUI 的 MATLAB 脚本可帮助找出色标的中心, 然后计算出与每个色标的 RGB 预期值

2012 年冬季刊

౱࠼ᆑ࠼‫ڨ‬

ӣ؉‫ڨ‬

图 4 - 在镜头校正前不同光源下的传感器图像

赛灵思中国通讯 46 期       13


视频领域的出色表现

差函数也可设置用于 L*u*v* 或是 L*a*b*

白平衡算法,在补偿时会去除所有的蓝

然后给测得的二维直方图加掩码。最后

色域。用户可将任何上述误差函数用于

色,导致场景的原生色彩严重失真。

计算四个存储的直方图和测得的直方图

仿真退火求最小值。

对灯箱中不同场景设置下的所有光源

之间的绝对差和或方差和:

k={1,2,3,4},我们通过根据色度对像素值

白平衡 使用上面介绍的相机校准方法,我 们建立了 4 个色彩校正系数和偏移量 (CCMk, k={1,2,3,4})。如果能够正确 地识别光源,这 4 个系数和偏移量就可 实现理想的色彩表达。采用运行在嵌入

进行分档并根据亮度值对每个像素加权,

权色度直方图)。这种方法可以去掉黑色

{k=1,2,3,4} 有关的预先计算出的基准二维

像素,或者那些 R、G、B 值存在少量差

直方图,H(x,y)是实时测量的直方图。

异就会在色度域中形成巨大噪声的像素。

要逐帧完成下列运算。首先根据统计信

光源照明条件下中性(灰色或白色)物

息估算光源权重(Wk)。权重经低通滤

体不可能产生的鲜艳颜色对应的直方图

波后,用于补偿场景突变,得到光源概

分档(图 6)。典型的掩码包含的是仅

率(pk)。根据权重 pk,使用 CCMk 值

围绕中性(白色)点周围的非零值,这

对色彩校正矩阵模块进行编程。

里是大多数光源所处的位置。我们将有

这种方法的优势在于,即便场景色

掩 码 的 二 维 直 方 图 值 Hk(x,y) 和

彩 和 光 源 色 彩 没 有 适 当 分 离, 校 准

CCMk 值硬件编码到运行在嵌入式处理

蓝色调,如果采用灰度世界法等简单的

)2

其 中 Hk(X,Y) 是 与 已 知 光 源

我们使用掩码,去除可能造成典型

形成。比如在水下摄影时会面临严重的

15

还得到二维的场景 YUV 直方图(亮度加

式处理器上的软件实现的白平衡算法需

CCMk 值的线性组合也能限制色彩伪影

15

(

Dk=∑ k=0 ∑ k=0 Hk (x,y) – H(x,y)

器上的白平衡应用中。 在实时运算过程中,白平衡应用负 责采集相似的二维亮度加权色度直方图。

根据测量的直方图偏差 Dk,用下式 计算标准化相似值:

1/Di 4 ∑ k=1 1/Dk

wi =

为避免逐帧色调陡变,我们将标准 化相似值按时间进行平滑处理。我们采 用简单的低通 IIR 滤波器,实现方法为:

pi=cwi+(1–c) pi–1 其中 0<C<1,用于控制 IIR 滤波器 的脉冲响应。C 值越小,转换就越平滑。 C 值越大,滤波器对光照条件变化做出 响应的速度就越快。 最后,我们将预先计算出的色彩校 正系数和偏移量(CCMk)线性合并,完 成 ISP 的色彩校正模块的编程(图 3):

CCM=∑ k=1 pk CCMk 4

න࠼

ૐӣᆑ࠼‫ڨ‬

图 7 是自然光和荧光灯照明条件下, 场景采用实时白平衡算法实现的结果, 可以看出感知的图像质量和色彩表达的 明显改善。 Zynq 视频与成像套件,加上赛灵思 提供的 MATLAB 脚本,为我们提供的算

౱࠼ᆑ࠼‫ڨ‬

ӣ؉‫ڨ‬

图 5 - 不同光源下的色彩校正,镜头校准图像。

14

法提供了补充和实现范例。 随着工业、消费和汽车视频应用分

赛灵思中国通讯 46 期

2012 年冬季刊


视频领域的出色表现

辨率和帧率的提高,实时色彩平衡算法 的难度正在不断增大。我们在本文介绍 的算法阐述了如何使用运行在嵌入式处 理器(诸如 Zynq 处理平台采用的 ARM9 核)上的软件,控制执行像素级色彩校 正的定制图像和视频处理算法。

参考资料:

1.

H.Y.Chong,S.J.Gortler 和

T.Zickler,《冯 • 克里斯假设和色彩恒定 的基础》,IEEE 计算机视觉国际大会会 议纪要,2007 年。 2.

S. Bianco,F.Gasparini 和

R.Schettini,《 白 平 衡 综 合 策 略 》, 2007 年国际光学工程学会(SPIE)纪要,

图 6 - CIE 色域中不同温度下的光源

第 39 卷,65020D-65020D-9 页。

图 7 - 捕获到的未校正的场景(左图)和经白平衡校正过的场景(右图)

AMMABLE SOC ႎᅃ‫ڦپ‬੗Պ‫ײ‬ဣཥण‫ׯ‬ ᆘॲĂ෉ॲत I/O ‫ڦ‬੗Պ‫ײ‬ ྺ࠽‫ڦݘ‬ᆌᆩ༵ࠃႎ‫ڦ‬ยऺ੗ీ ႜᄽ๯੼ All Programmable SoC ഗॲLj၄ᅙࠃऋ

www.xilinx.com/cn/zynq ዐࡔ0ၑߗ‫ں‬൶‫پ‬૙ฆ Ҿ޷૧‫ۉ‬ጱᇮॲև ၑߗ ԛ৙ ‫ۼׯ‬ ฉ࡛ ศᒰ 䎑⚫ᙓ‫ޢ‬ਮ

‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬

(852) 2176 5388 (010) 8206 2488 (028) 8652 8262 (021) 3367 8387 (0755) 8378 1886

俏⑥ ‫ࣆۉ‬: (852)2424 5200 ‫د‬ኈ: (852)2494 7159

ዐࡔ0ၑߗ‫ں‬൶‫پ‬૙ฆ ੔ཚຕጴरຍև ศᒰ ԛ৙ ฉ࡛ ࿴ࡲ ‫ۼׯ‬

‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬ ‫ࣆۉ‬

р⎭ ‫ࣆۉ‬: (021)5131 6060 ‫د‬ኈ: (021)5198 1020

(0755) 2698 8221 (010) 5172 6678 (021) 5169 6680 (027) 8769 0655 (028) 8513 1563 ␧൩ ‫ࣆۉ‬: (0755)8660 6588 ‫د‬ኈ: (0755)2583 0986

CS1284_ARM_Asia_Large_Sign_China_FINAL.indd 1

2012 年冬季刊

赛灵思中国通讯 46 期       15


专家园地

专家园地

使用 BFM 测试和调试 Zynq SoC 设计 作者: Martin Hofherr Missing Link Electronics 公司设计工程师 Martin.hofherr@missinglinkelectronics.com Endric Schubert Missing Link Electronics 公司联合创始人 Endric.schubert@missinglinkelectronics.com

AXI 总线功能建模 可简化 Zynq-7000 All Programmable SoC 组件及 子系统的验证工作。本文以 赛灵思工具链为基础,通过 逐步指导实例,详细介绍了 该验证方法。

16

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地

灵 思 在 ZynqTM-7000 All

BFM)。AXI BFM 已经投入市场将近两

Programmable SoC 中内置

年时间,近期已升级到 2.1 版本。[1]

了 功 能 强 大 的 双 核 ARM®

Cortex ™ A9 处理器,能让用户使用单 个芯片即可构建自己的高性能片上系统。 这样软件工程师可以充分利用包括 GNU/ Linux 在内的丰富的 ARM 软件生态系统, 而硬件设计人员则可以在可编程逻辑架 构中添加协处理器和数字信号处理功能。

下面深入了解这种强大的系统级验 证方法及采用这种方法所涉及的步骤。 首先列出构建一个能够工作的 BFM 验证 环境所需的工具和组件,其中包括一个 能够为使用 BFM 的新手提供帮助的文档 列表。然后介绍使用 AXI BFM 验证 RTL 模块的验证流程。

现在的问题在于验证和调试这样的片上 系统,尤其是软硬件之间的接口。例如, 接口一边受器件驱动器控制,一边受中 断服务程序控制。 随着 ARM CPU 的问世,高级微控 制器总线架构(AMBA®)以及更为重要 的高级可扩展接口(AXI)已成为连接 FPGA 内部各组件的事实标准。AXI 并 非传统意义上的总线,而是使用交叉开 关矩阵和仲裁,在多个主从机模块间实 现基于事务的互联。AXI 有三种类型, 分 别 是 AXI4( 常 规 类 型)、AXI4-Lite 和 AXI4-Stream。赛灵思 ISE® 14.2 版

2012 年冬季刊

工程师掌握这种方法最好的方式就 是参考实例,所以最后本文将一步一步 地介绍使用赛灵思 ISE 设计环境的详细 情 况。 本 文 选 择 的 实 例 是 一 个 由 一 个 AXI4 主模块和一个连接 BRAM 的存储 控制器组成的简单设计,可作为下一个 BFM 验证项目的起点。这个实例可通过 下列网址,从 Missing Link Electronics 的 开 发 人 员 专 区 下 载:http://www. missinglinkelectronics.com/devzone/ axi-bfm。 使用步骤

本和 Vivado ™ 2012.2 版本设计工具套

总线功能模型(BFM)能够显著降

件配套提供 v1.06a AXI 互联功能,同时

低 SoC 设计验证阶段的工作量。这种方

可与 AXI3 和 AXI4 相兼容。

法可帮助您直接将 RTL 模块作为一个被

总线功能建模(BFM)是一种非常

测器件(DUT)连接到 BFM,激励并核

适用于片上系统设计的电子系统级验证

对高抽象层面上 DUT 的响应,整个过程

方法。BFM 的价值在于能够抽象总线互

无 需 探 究 AXI 互 联 的 细 节。 赛 灵 思 和

联 并 提 供 高 级 API, 以 实 现 用 于 激 励

Cadence 共同推出的 AXI BFM 的一大

RTL 模块的测试平台,从而帮助用户节

主要优势在于可以避免开发用于匹配

省宝贵的时间。BFM 可帮助设计人员验

AXI4-Lite IP 接口(IPIF)的代码,也无

证与 Zynq-7000 器件的处理系统相连接

需手动编写 RTL 模块测试台。AXI BFM

的 RTL 模 块。 在 赛 灵 思 ISim 这 样 的

紧密集成在 FPGA 设计环境中。使用赛

RTL 仿真器内部运行时,BFM 可帮助用

灵思 Platform Studio(XPS)就可为嵌

户按照自下而上的设计流程,一次验证

入式系统生成顶层 HDL,并为 BFM 仿

一个或多个模块。赛灵思与 Cadence 通

真项目生成大部分必备文件。XPS 还可

力合作,提供了一种在业经验证的行业

免除为 DUT 正确连线的负担。您可使用

标 准 基 础 上 构 建 的 验 证 环 境(AXI

“fush.sh”脚本将 BFM 项目与赛灵思 赛灵思中国通讯 46 期       17


专家园地

Test.v Testbench.v AXI BFM Configuration Function API Channel API CLK & Reset Generator

Test Program

Signal Interface

DUT

图 1 - 测试系统结构

ISim 集成在一起,完成最终测试程序的

协议,它会执行额外的检查,而且在仿

AXI4-Lite 和 AXI4-Streaming 主从模块

编写。

真过程中,可以看到一旦 RTL 模块“误

提供模型。

DUT 由一个或多个构成 RTL 模块 的 VHDL 或 Verilog 文 件 组 成。RTL 模 块 的 AXI4 接 口( 可 以 是 AXI4、AXI4-

解”AXI4,就会发出告警。这个过程能 够在很大程度上帮助用户成长为 AXI4 专家。

可 定 制 不 同 的 AXI 接 口。 虽 然 常 规 的 AXI3 和 AXI4 接口是基于突发模式,可

AXI BFM 环境不局限于验证单个

允许使用不同的数据宽度和乱序事务处

Verilog“Testbench.v”内部的 AXI BFM

RTL 模块,而且能够高效地验证多个模

理,对只有来自软件的寄存器式访问的

连接,然后与顶层设计文件“Test.v”中

块。因此建议使用 AXI BFM 验证组件、

较 简 单 RTL 模 块,AXI3-Lite 版 本 足 以

的测试程序合并。该测试程序用于驱动

子 系 统 乃 至 整 个 片 上 系 统, 并 且 使 用

使用。用于处理面向信息流的数据(比

和检查 DUT。这样做的好处在于可以不

AXI BFM 进行回归测试。但是需要提醒

如来自摄像头接口的视频数据)的硬件,

探究 AXI4 的所有细节。用户可以使用分

一下的是,在所有复杂的验证项目中,

往往采用 AXI-Stream 协议,因这种协议

区在功能 API 和通道 API 两个抽象层面

往往出现“只见树木,不见森林”的情况,

与常规的 AXI 接口相比,更适合管理流

上的简便易用、丰富多样的 API 编写自

所以应该和同事共同核查(或自己核查)

数据的特征。不过本文介绍的实例的重

己的测试程序。

仿真过程中测试的功能与硬件中使用的

点 是 常 规 AXI4 接 口 以 及 AXI4 总 线 的

功能是否相同。

BFM 的使用。在 XPS 中使用其它类型

Stream 或 AXI4-Lite)

这种 API 采用的是 Verilog HDL 语 言。不过很快就可以发现,这种 API 不

根据不同类型的 RTL 模块的需要,

AXI4 BFM 和 XPS

的 AXI 接口测试 RTL 模块的工作流程完 全一样,读者可将本文的介绍当作使用

仅适合 HDL 设计人员,而且也非常适用

AXI4 BFM 不 仅 可 用 于 验 证 单 个

于有固件或驱动程序开发经验的软件工

RTL 模块内核的总线接口,也适用于仿

程师。甚至更好的是,由于 AXI BFM 完

真 整 个 嵌 入 式 设 计 的 总 线 事 务。AXI

下 面 将 展 示 如 何 在 XPS 里 设 置

全理解 AXI4、AXI4-Lite 和 AXI4-Stream

BFM 为 AXI3、AXI4、AXI3-Lite、

BFM,从而有效地生成 HDL 代码,用于

18

这些接口进行测试的指南。

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地

实例化 DUT 和 BFM,并在她们之间建

的大小和突发的 ID。对每一次突发,从

立互连。这种方法可以最大限度地减轻

模块都会利用经地址通道传输的 ID 向主

手动编写互联 HDL 代码的工作量,这种

模块发送响应,通知主模块本次事务处

工作极为耗时。生成的测试系统由待测

理是否成功。

试的外设和提供总线激励的 BFM 共同组 成。这样,使用 BFM 主模块,就可以仿 真系统中总线主设备一般会发起的总线 传输,然后检查连接的 RTL 从模块,看 是否行为正确。另一方面,可以使用从 BFM 验证采用 AXI 主接口的 RTL 模块 的行为正确与否。

在 这 五 条 通 道 上, 由 READY 和 VALID 握手信号对来控制实际的数据传 输。正如这两个信号的名称意义所示, 当 总 线 上 的 数 据 有 效 时, 发 送 侧 断 言 VALID。当接收侧做好接收数据的准备 时,接收侧断言 READY。实际的事务 处 理 发 生 在 总 线 时 钟 的 上 升 沿, 此 时

在本文接下来的内容中,将创建一

READY 和 VALID 都处于高电平。在自

个 由 一 个 从 模 块 和 一 个 AXI4 Master

行实现对 AXI 总线的访问时,务必记住

BFM 组成的简单系统,后者用于为从模

VALID 信号的断言不能取决于 READY

块提供激励。

信号,否则会陷入死锁。

备 XPS 14.2 版本 • 赛灵思 ISim(14.2 版本) • AXI BFM 的 许 可 证 密 钥( 部 件 号 码 DO-AXI-BFM) • 赛灵思 DS824,“AXI BFM2.1 版本” (替代赛灵思 UG783)[1] • 赛 灵 思 DS768,“LogiCORETM IP AXI 互联(1.06a 版本)”[3] • AXI BFM 实 例 项 目, 网 址:http:// www.missinglinkelectronics.com/ devzone/axi-bfm 和用 XPS 创建任何新的嵌入式设计 一样,先从创建一个新的空白项目开始, 将其命名为“bfm_system”。不过这里

AXI4 架构简介

在 XPS 中创建简单测试系统

没 有 使 用 MicroBlaze® 处 理 器 或 Zynq7000 All Programmable SoC,而是实

在开始介绍实例之前,先简单了解

现在我们已经对 AXI4 总线系统有

一下 AXI4 总线架构,有关详细介绍请参

了基本的理解,可以开始在 XPS 中创建

阅 AXI 总线规范。[2] AXI4 总线系统分为

简 单 测 试 系 统 了, 并 观 察 BFM 和 AXI

五个独立的事务通道:写地址通道、写

总 线 的 行 为。 这 个 系 统 由 一 个 AXI4

数据通道、写响应通道、读地址通道和

Master BFM、一个 Block RAM 控制器、

读数据通道。地址通道除了传输实际的

一个 Block RAM 和一个用于连接所有组

下面添加一个在“Bus and Bridge”

源地址或目标地址外,还传输发生在相

件 的 AXI 互 联 组 成。 下 面 是 创 建 这 个

分类下的 AXI4 Interconnect IP,再添加

关数据通道上的突发传输的类型信息。

AXI BFM 实例所需的工具列表:

一个 AXI BRAM Controller 和一个相关

信息的内容包括突发的传输数量、数据

• 赛灵思 ISE 14.2 版本或更高版本,配

联的 Block RAM,你可以在 XPS IP 标

例化一个 AXI4 Master BFM,用于在 AXI4 总线上发起事务处理任务。可以在 XPS 中 IP 内 核 树 的 验 证 节 点 上 找 到 AXI4 Master BFM。

图 2 - XPS 的 Bus Interfaces 标签显示测试系统的总线布局

2012 年冬季刊

赛灵思中国通讯 46 期       19


专家园地

图 3 - XPS 的 Ports 标签显示时钟和复位的外部端口

签中“Memory and Memory Controller”

以 找 到 与 XPS 设 计 名 字 完 全 相 同 的

方法的结构见图 1 所示)。在总线上发

分类 下 找 到 这 两 个 IP。 在 XPS 的 Bus

Verilog 或者 VHDL 文件(根据配置设置

起事务处理的方法是从 AXI BFM API 调

视图中将这些 IP 组件相互连接,让系统

中 选 择 的 语 言), 该 文 件 名 为“bfm_

用对应的 Verilog 任务。API 分为通道层

看上去与图 2 所示的一样。

system.vhd”。这就是我们系统的顶层,

和功能层。使用通道层 API 可在不同的

其中包含刚刚在 XPS 中实现的所有实例

通道上发起传输,比如读地址和写地址

化组件和连接。

通道,这样我们就能单独控制写突发或

在 XPS 的 Ports 标签中,将 AXI 互 联的时钟和复位端口配置成 external,

者 读 突 发 的 每 一 个 阶 段。 使 用 功 能 层

将 BRAM 控制器和 Master BFM 的时钟 端口也连接到外部时钟端口。可让 AXI

运行仿真

API 可方便地启动整个数据传输,比如

BRAM 控 制 器 的“ECC_Interrupt” 和

根据 AXI BFM 说明书的建议,应在

读突发或者写突发。另外功能层 API 还

“ECC_UE”端口保持未连接,因为不

提供了时钟和复位信号的测试顶层模块

提供可改变 BFM 设置的 Verilog 功能,

需要使用 ECC 功能。设置时钟端口的频

中例化该系统,再从独立的测试模块发

比如修改 ISim 控制台上的输出冗余。

率为 100MHz。最终系统应和图 3 所示

起 AXI 总线上的事务处理任务。(这种

DS824 详细介绍了该 API,并提供一个

的一样。 接 下 来 在 XPS 的 Addresses 标 签 中设置 BRAM 控制器的地址范围。这样 还可以确定 BRAM 模块的大小。这里创 建一个 32K 的 Block RAM,起始地址为 0x00000000。

图 4 - 摘自 bfm_system_text.v。可以使用 Verilog“.”运算符引用 AXI BFM 实例, 调用 BFM API 的功能和任务

现在基本系统设置已经完成,点击 工具条左边的“Generate HDL Files” 就可以让 XPS 生成 HDL 代码。这样可 以在 XPS 项目文件夹中创建一个名为 Simulation 的目录。如果想在 XPS 中修 改系统,重新生成 HDL 代码,务必将手 工添加到文件夹中的文件进行备份,否 则 XPS 在生成仿真文件时,这些文件将 被完全覆盖。在 Simulation 文件夹中名 为 “behaviorial”的文件夹里,我们可

20

图 5 - 主机通过断言 s_axi_wlast(1,屏幕截图顶部的圈内),为突发的最后一个字做 上标签。从模块通过写响应通道通知主机突发是否成功(2,底部圈)。

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地 编程人员参考。[1] 使 用 Verilog 的“.” 运 算 符, 通 过 引用 BFM 实例,在测试程序中调用 API 的函数和任务。图 4 就是这种函数调用 的例子。完整的代码包含在与本文配套 的项目包中,并提供 shell 脚本,用于编

BFM 会检查连接的 RTL 模块是否在复 位后为输出端口应用正确的复位值。在 ISim 的控制台可以检查这一行为。总线 控制模块的协议检查 API 还能提供更多 功能。AXIBFM 产品说明书 [1] 对此也有 深入介绍。

译实例并运行 ISim 查看波形。请阅读项 目包中的 README.txt 文件了解如何使

强大的工具

用该脚本。运行该脚本即可打开 ISim 主

赛 灵 思 和 Cadence 已 经 为 Zynq-7000

窗口。加载 ISim 中的“axi_waveforms.

All Programmable SoC 设计人员提供了

wcfg”文件,仿真系统 15 微秒,即可查

一种极为强大的片上系统验证工具——

看 AXI 总线各通道上的信号。

AXI4BFM。通过在方便的功能 API 之上

测试程序首先对 Block RAM 发起 256 个 32 位字符组成的写突发,然后读 回数据。通过搜索上升时钟沿(在写地

编写测试程序,我们可以在设计之初和 回归测试中验证 RTL 模块。 Missing Link Electronics 采用预先

址 通 道,s_axi_awready 和 s_axi_

验证的 IP,在专家提供的应用支持下,

awvalid 信号同时处于高电平),我们

开发针对嵌入式系统的解决方案,可将

可以看到用于描述突发流向的信息被发

市 售 FPGA 器 件 与 开 源 软 件 相 结 合。

送给 Block RAM 控制器。主机通过断言

Missing Link Electronics 是赛灵思联盟

s_axi_wlast 信号为突发的最后一个字

计划的认证成员,也是 Zynq-7000 系列

符做上标签。跟随写突发,从模块——

All Programmable SoC 的早期使用合作

即这里的 Block RAM 控制器——会通过

伙伴。

写响应通道(图 5)发出事务处理成功 的信号。 可针对读突发检查相同的结构。描 述突发的信息通过读地址通道发送,实 际数据通过读数据通道发送。与写突发 不同,这里没有单独的读取响应通道。 但从模块会对读传输中的每一个字断言 读响应信号 s_axi_rresp,以说明目前

参考资料: 1. 赛灵思,DS824 AXI BFM 2.1 版本,2012 年 4 月 24 日 2. ARM,IHI0022D AMBA AXI 和 ACE 协议 规范,2011 年 3. 赛灵思,LogiCORRE AXI 互联 IP(1.01.a 版本),2010 年 12 月 14 日

的读取是否成功。 当然,对这个使用现成组件的小型 实例系统来说,所有的总线事务处理都 是成功的。不过在开发 RTL 模块时,需 要 判 断 RTL 模 块 是 否 符 合 AXI 标 准。 BFM 提供协议检查功能,用于确保连接 的 RTL 模块行为的正确性。例如,主机

2012 年冬季刊

赛灵思中国通讯 46 期       21


专家园地

专家园地

利用赛灵思 Vivado HLS 实现浮点设计 作者:James Hrica 赛灵思公司高级软件应用工程师 jhrica@xilinx.com

22

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地

多数设计人员在设计中使用定点算术逻辑

在赛灵思 FPGA 上用 C/C++ 源代码轻松实 现浮点运算硬件是 Vivado HLS 工具的一 大功能。但浮点运算 并非像看上去那么容 易掌握。

来运算数学函数,因为这种方法速度快, 占用面积小。不过在许多情况下,使用浮 点数值格式进行数学计算更为有利。虽然

定点格式可以实现精确的结果,但给定的格式动态范围 非常有限,故设计人员必须进行深度分析,判断贯穿复 杂设计的数位增长特征。而且在采用定点格式的时候, 设计人员还必须引入许多中间数据类型(有着不同的定 点格式),才能实现理想的结果质量(QoR)。相比之下, 浮点格式能够在宽泛得多的范围内表达实数,便于设计 人员在许多算法的一长串计算中使用单一的数据类型。 从硬件设计的角度来看,手动实现浮点格式的成本 较高。在设计中实现这种格式需占用较大的面积。另外 这种格式还会增大时延,因为与实现整数(定点)算术 所需的逻辑相比,使用浮点格式实现给定算术运算所需 的逻辑要复杂得多。 幸运的是,赛灵思推出一款全新 VivadoTM 高层次 综合(HLS)工具,能够帮助设计人员把 C/C++ 设计规 范用于寄存器传输级(RTL),实现需要采取浮点计算 的设计。Vivodao 可以显著地减少在硬件中实现浮点算 法所需的设计工作量。虽然在浮点设计上运行 HLS 的基 本做法一目了然,但一些细节需要详细说明。本文的讨 论话题将涉及基本内容和高级内容,涵盖设计性能、面积, 以及使用 Vivado HLS 工具在赛灵思 FPGA 中实现的浮 点逻辑进行验证。 浮点数据和双精度数据 Vivado HLS 工具支持 C/C++ 的浮点数据和双精度 数据类型。这两类数据依据的是 IEEE 754 标准 [1] 定义 的单精度和双精度二进制浮点格式。同样,《赛灵思 LogiCORETM IP 浮 点 运 算 器 6.1 版 本 产 品 指 南 》 PG060[2] 也对浮点格式和算术实现进行了良好总结。在 采用浮点运算时需要重视的一点是这种数值格式无法表 达每一个实数,因此精度有限。 这一点比看上去更微妙、更复杂,而且关于这点已 有大量专著。欢迎设计人员详细阅读参考资料 [3、4、5 和 6]。 一般来说,即便是在纯软件环境下,针对相同计算采用 不同算法乃至相同算法的不同实现(微架构)也无法得 到完全相等的二进制结果。这种误差的来源有多种,其 中包括舍入误差的累加。而这种累加对运算进行的次序

2012 年冬季刊

赛灵思中国通讯 46 期       23


专家园地 很敏感。另外,FPU 对扩展精度的支持也会影响舍入结果。

单精度格式之前进行舍入。第三个值的乘法也采用扩展精度执

以 x87 的 80 位格式为例,SIMD(SSE 等)指令的行为就与

行,但舍入后存储为双精度格式,会导致结果产生不同偏差。

x87 不同。另外,许多浮点字面值只能近似地表达,即便是对 有理数也是如此。其它可能导致误差的因素有库函数逼近原理,

注意:在编译不同的机器架构或采用不同编译器的情况下, 该代码也可能产生不同的结果。

例如三角函数,常量传用或是合并效应。 此外,部分浮点算法支持“次正常”值,用于表达比浮点

案例 2:整数也会丧失精度

格式正常表达值小的数值。例如在单精度格式中,最小的正常 浮点值是 2-126。但是在支持次正常值的情况下,尾数位可用

// Another demo of floating-point predictability problem

于通过固定指数值 2-127 表达定点数值。

int main(void)

现在介绍用于验证浮点计算结果的简单软件示例。

{ int i;

下面的例 1 说明用不同方法(乃至貌似相同的方法)完成

float delta = 1.0f;

相同计算会得到的结果略有不同。同时,例 2 说明二进制浮点

for (int i = 0; i < 100000000; i++) { float x = (float)i + delta;

格式不能准确地表达所有数值(甚至整数)。

if (x / (float)i <= 1.0f) {

例 1:相同计算得到不同结果

// (x / i) should always be > 1.0 printf("!!! ERROR on iteration #%d !!!\n", i + 1);

// Simple demo of floating point predictability problem

return -1;

int main(void) {

}

float fdelta = 0.1f; // Cannot be represented exactly

}

float fsum = 0.0f; while (fsum < 1.0f) fsum += fdelta; float fprod = 10.0f * fdelta; double dprod = float(10.0f * fdelta); cout.precision(20); cout << "fsum: " << fsum << endl; cout << "fprod: " << fprod << endl; cout << "dprod: " << dprod << endl; return 0; }

} Program output: !!! ERROR on iteration #16777217 !!! 这 个 例 子 说 明, 在 存 储 为 单 精 度 浮 点 格 式 时, 大 于 16,777,216(224)的整数值会丧失精度。这是因为有效位数 为 24 位,超过这个位数,i 的最低有效位在转换为浮点格式时 必须舍弃。 使用 VIVADO HLS 工具进行浮点设计的基础

Program output:

要让 HLS 原生地支持基本算术运算符 (+, -, *, /)、关系符

fsum: 1.0000001192092895508

(==, !=, <, <=, >, >=) 和格式转换(比如整数 / 定点转浮点,

fprod: 1

浮点转双精度),需要将这些运算映射到在最终 RTL 中进行

dprod: 1.0000000149011611938

初始化的赛灵思 LogiCORE IP 浮点运算器内核上。另外,对

示例 1 的第一个输出是将 0.1 的近似值累加十次,会造成 舍入误差的积累。每次迭代都会将不精确的单精度 0.1 加到累 加和中,然后存储到单精度(32 位)寄存器中。随着累加和 指数(以 2 为底)的增加(从 -4 到 0),不论浮点单元(FPU) 内部的精度如何,中间和都会发生四次舍入。 第二个值的计算采用 x87 扩展精度执行,结果在存储为

return 0;

24

sqrt() 函数族的调用(从 C/C++ 标准数学库中调用)以及 1.0/ x 和 1.0/sqrt(x) 形式的代码,也需要映射到合适的浮点运算器 内核上。虽然 CORE GeneratorTM 能够为定制精度浮点类型 构建这些内核,但 Vivado HLS 工具只生成符合 IEEE-754 标 准的单精度和双精度内核。软件产生的结果与浮点运算器内核 硬件产生的结果之间存在微小的差异,这种差异的来源可能在 于运算器内核对次正常输入的处理方式是“一次性归零”,即

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地

如果运算过程没有反馈路径,设计人员可以在完全流 水线的环境下使用 HLS 支持的全部浮点运算符和函数, 并在每个时钟周期内生成一个结果。 在遇到次正常值时,用 0.0 将其替代。关于这些内核的工作方

特级的不匹配,但从分析角度来说,两种结果都与真实的结果

式的详细介绍,请参阅《LogiCORE IP 浮点运算器 6.1 版本

极为接近。

产品指南》PG060。[2] Vivado HLS 工具还支持 C(99)/C++ 标准数学库提供的许 多其它函数,但其中没有浮点运算器内核。关于完整的函数列 表,请参阅《Vivado 设计套件用户指南:高层次综合 2012.2 版本》 UG902。[7] 为在赛灵思 FPGA 上实现,许多函数的底 层近似算法已经过选择和优化,其精度特点可能在一定程度上 与软件标准中的规定有所不同。

例 3:无意识地使用双精度数学函数 // Unintended consequences? #include <math.h> float top_level(float inval) { // double-precision natural logarithm

Vivado HLS 只能在硬件中以单精度和双精度浮点运算的 方式实现标准的数学库函数。如果用户用整数或定点参数调用

return log(inval); }

这些函数或是返回变量,工具将在必要的情况下进行浮点格式 这个例子在实现 RTL 过程中将输入转换为双精度格式,

转换,以浮点方式完成计算。 如果运算过程没有反馈路径,设计人员可以在完全流水线 的环境下使用 HLS 支持的全部浮点运算符和函数,并在每个 时钟周期内生成一个结果。Vivado HLS 工具虽然可以针对不 常发生的串行执行来调度这些运算,但这样难以实现最大的面 积效率,尤其对于触发器利用率来说尤为突出。甚至对于“/” 和 sqrt() 也是如此,因为这两者有低吞吐量的内核可以使用。 在基于 ANSI/ISO-C 的项目中使用 <MATH.H>

以双精度计算自然对数,然后再将结果转换为单精度输出。 例 4:单精度数学函数的显式使用 // Be sure to use the right version of math functions... #include <math.h> float top_level(float inval) { // single-precision natural logarithm

要在基于 ANSI/ISO-C 的项目中使用所支持的标准数学库 函数,需要将 math.h 报头文件包含在所有需要调用函数的源 文 件 里。 基 础 函 数 用 于 运 算( 和 返 回) 双 精 度 值, 例 如 double sqrt(double)。大多数函数的单精度版都在函数名称 上附有“f”,例如 float sqrtf(float)、float sinf(float)和 float ceilf(float)。需要记住这点,否则即使参数和返回变量 是单精度值,Vivado HLS 也会执行 FPGA 资源占用规模更大 的双精度函数。另外,格式转换也会占据更多资源,增加计算 时延。 使用 ANSI/ISO-C 时还需要注意另外一个问题,即在以软

return logf(inval); } 由于调用的是单精度对数函数,故在 RTL 中实现的过程 中无需进行输入 / 输出格式转换。 在 C++ 项目中使用 <CMATH> 在使用 C++ 进行设计时,取得标准数学函数库支持的最 直接办法是将 <cmath> 系统头文件包含在所有需要调用函数 的源文件中。这个头文件提供各种版本的基础(双精度)函数,

件方式编译和运行代码时(包括 RTL 协同仿真中的 C 语言测

函数经加载后可作为参数,并在 std 命名空间中返回单精度

试台)所使用的算法与在 RTL(由 HLS 生成)中使用的算法

(float)值。要使用函数的单精度版,必须将 std 命名空间包

不同。在软件中调用的是 GCC libc 函数,而硬件侧使用的是

含在范围内,方法有两种:1 使用范围解析运算符 (::);2 利用

Vivado HLS 工具的数学函数库代码。这会导致两者间存在比

指令导入整个命名空间。

2012 年冬季刊

赛灵思中国通讯 46 期       25


专家园地 例 5:明确范围解析

是这个问题。

#include <cmath>

例 7A:测试程序

float top_level(float inval) { // single-precision natural logarithm return std::log(inval); }

使用标准 C++ 数学库 // Contents of main.cpp - The C++ test bench #include <iostream> #include <cmath> using namespace std; extern float hw_cos_top(float);

例 6:使命名空间的内容进入文件范围

int main(void) {

#include <cmath>

int mismatches = 0;

using namespace std;

for (int i = 0; i < 64; i++) {

float top_level(float inval)

float test_val = float(i) * M_PI / 64.0f;

{

float sw_result = cos(test_val); //float std::cos(float)

// single-precision natural logarithm

float hw_result = hw_cos_top(test_val);

return log(inval);

if (sw_result != hw_result) {

}

mismatches++; cout << "!!! Mismatch on iteration #" << i;

和在 ANSI/ISO-C 项目中使用 <math.h> 的情况一样,当 在代码中使用 <cmath> 中的函数时(代码通过 Vivado HSL

cout << " -- Expected: " << sw_result;

工具进行综合),以软件方式运行代码的结果与用 RTL 实现

cout << "\t Got: " << hw_result;

代码的结果也可能存在差异,因为两种方式采用的近似算法不

cout << "\t Delta: " << hw_result - sw_result;

同。为此,Vivado HLS 编程环境提供一些特定的算法,可用

cout << endl; }

于对 RTL 进行综合以便用于 C++ 建模。 }

在对 HLS 的 C++ 代码修改情况进行验证,以及后续用 C++ 测试台对得到的 RTL 进行协同仿真的过程中,赛灵思建 议在 HLS 源代码中使用相同的数学库调用,并在测试台代码 中使用 C++ 标准库,以便生成参考值。这样能够在开发过程 中为 HLS 模型和数学库提供多一层验证。 要采用这种方法,应只将 <hls_math.h>Vivado HLS 工具 头文件包含在需要综合为 RTL 的源文件中。只有在验证 HLS 设计时使用的源文件(比如测试程序和支持代码)才需要包含 <cmath> 系统头文件。<hls_math.h> 头文件中函数的 HLS 版 是 hls::namespace 的组成部分。对于需要针对软件建模和验 证进行编译的 HLS 版函数来说,应针对每一个函数调用使用

return mismatches; } 例 7B:HLS 设计代码 使用 HLS_MATH 库 // Contents of hw_cos.cpp #include <hls_math.h> float hw_cos_top(float x) { // hls::cos for both C++ model and RTL co-sim

hls::scope 解析。 注 意: 在 使 用 C++ 标 准 数 学 库 调 用 时, 不 应 导 入

return hls::cos(x); }

hls::namespace(通过“using namespace hls”命令),因 为这样会在 HLS 综合的过程中导致编译错误。例 7a 说明的就

26

编译该代码并以软件方式运行(比如在 Vivado HLS 图形用户

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地

由于浮点运算使用的资源量比整数运算或者定点运算要大得 多,所以 Vivado HLS 工具会尽量高效地使用这些资源。 界面中“Run C/C++ Project”),hw_cos_top() 返回的结果

由于浮点运算的顺序可能会影响结果(例如,在不同的时

与 HLS 生成的 RTL 所产生的结果相同,同时该程序还会根据

间进行舍入),因此表达式中的多个浮点字面值可能无法合并

软件参考模型(即 std:cos())测试不匹配结果。如果之前将

到一起。

<cmath> 包含在 hw_cos.cpp 中,则 C/C++ 项目进行编译并 以软件方式运行时就不会出现不匹配情况,但在 RTL 协同仿

例 9:运算顺序会影响常量合并

真的过程中会出现不匹配。 重要的是不要假定 Vivado HLS 工具会进行看似理所应当 又微不足道的优化。和大多数 C/C++ 软件编译器一样,涉及 浮点字面值(数值常量)的表达式可能不会在 HLS 综合过程

// very different implementations void top(float *r0, float *r1, float inval) { // *r0 = inval; constants eliminated

中得到优化。请考虑下列示例代码。

*r0 = 0.1f * 10.0f * inval; // two double-precision multiplies

例 8:代数等价; 差异巨大的 HLS 实现

*r1 = 0.1f * inval * 10.0f; }

// 3 different results

在本例中,由于该表达式运算顺序从 r0 开始,编译器将

void top(float *r0, float *r1, float *r2, float inval)

整个表达式识别为恒等式,不生成任何硬件。但是相同的情况

{

并不适用于 r1。r1 生成了两个乘法器。 // double-precision multiplier & conversions *r0 = 0.1 * inval; // single-precision multiplier *r1 = 0.1f * inval; // single-precision divider *r2 = inval / 10.0f;

例 10:避免在整数表达式中使用浮点值 void top(int *r0, int *r1, int inval) { *r0 = 0.5 * inval;

}

*r1 = inval / 2; 如果把这个函数综合到 RTL,得到用于计算 r0、r1 和 r2

}

的三个线路会有显著不同。根据 C/C++ 的规则,字面值 0.1

在本例中,HLS 赋给 r0 的逻辑采用如下实现过程:先把

代表一个无法精确表达的双精度数。因此工具会实例化一个双

inval 转换为双精度格式以便乘以 0.5(双精度值),然后再转

精度(double)乘法器内核,以及用于将 inval 转换为双精度,

换回整数。另一方面,HLS 将与 2 的整数次幂进行的乘法和

再将乘积转换回单精度类型(*r0 的类型)的内核。如果需要

除法运算分别优化为向左移位和向右移位操作,然后只需通过

的是单精度(float)常量,应给该字面值附加一个 f,比如 0.1f。

简单的线路选择就可以在硬件中实现(根据运算的方向和类型,

因此,上述 r1 的值就是(非精确)0.100 的浮点表达与 inval

进行适当的补零或者符号扩展)。因此,在实现相同的算术结

的单精度乘积。最终,r2 用单精度除法内核求得,inval 是分子,

果时,用于给 r1 赋值的逻辑其效率要高得多。

10.0f 是分母。实数值 10 可以确切地用二进制浮点格式表达。 因此根据 inval 值的情况,r2 的计算可能是精确的,而 r0 或者 r1 都欠精确。

2012 年冬季刊

并行性、同步性和资源共享 由于浮点运算使用的资源量比整数运算或者定点运算要大 赛灵思中国通讯 46 期       27


专家园地 得多,所以 Vivado HLS 工具会尽量高效地使用这些资源。在

在默认条件下,Vivado HLS 工具安排该循环迭代 32 次

数据关系和约束允许的条件下,该工具一般会让源运算的多次

并实现单个加法器内核,前提是输入数据持续不断,且输出

调用共享浮点运算器内核。下面的例子将对四个浮点值求和,

FIFO 不会满。得到的 RTL 模块需要使用 32 个周期,还需要

用以说明这个概念。

一些周期用于清空加法器流水线。在 I/O 数据速率允许的条件 下速度越快越好。另一方面如果数据速率提高,设计人员还可

例 11:使用单内核完成多重运算 // How many adder cores?

以用 HLS 技术相应地提升处理速度。作为对上述例子的扩展, 我们可以使用 Vivado HLS 工具的数组维度改变指令将接口宽 度加倍,从而增大 I/O 带宽。要提高处理速度,需将循环局部 展开两倍,使其与带宽的增加相匹配。

void top (float *r, float a, float b, float c, float d) { *r = a + b + c + d; }

例 13:独立求和 // Independent sums, with increased I/O // bandwidth -> high throughput and area void top (float r0[32], float a[32], float b[32]) { #pragma HLS interface ap_fifo port=a,b,r0 #pragma HLS array_reshape cyclic factor=2 \ variable=a,b,r0

图 1 - Vivado HLS 报告体现的是一个实例化的单加法器内核

在数据带宽允许的情况下,可以将本需要顺序执行的大 量运算在给定时间内同步完成,以达到提高运算量的目的。

for (int i = 0; i < 32; i++) { #pragma HLS pipeline #pragma HLS unroll factor=2 r0[i] = a[i] + b[i];

在下面的例子中,HLS 工具创建的 RTL 将流水线循环中两个 源数组的元素相加,生成结果数组的值。Vivado HLS 把顶 层数组参数映射到存储器接口上,从而限制每周期的访问数 量(例如,对双端口 RAM 来说是每周期两次,FIFO 等是每 周期一次)。

} } 使用这些增加的指令,Vivado HLS 工具能综合出具有两 个加法器流水线的 RTL。两个流水线可以并行工作,使迭代数 量减半,每次迭代能产生两个输出样本。这样做之所以可行,

例 12:独立求和 // Independent sums, but I/O only allows // throughput of one result per cycle void top (float r0[32], float a[32], float b[32]) { #pragma HLS interface ap_fifo port=a,b,r0 for (int i = 0; i < 32; i++) {

是因为每个计算都是完全独立的,而且加法运算的次序不会影 响结果的精度。不过如果出现更加复杂的计算,比如需求出一 连串独立浮点运算的结果,Vivado HLS 工具就无法重新安排 这些运算的次序。最终导致并行性或者共享性低于预期。另外, 如果流水线数据路径中存在反馈或者递归,那么通过同步化来 增大设计的吞吐量就需要对源代码结构进行一些手动重调整。 例 14 详细说明了 Vivado HLS 工具如何处理浮点运算的 反馈和递归。下面的代码涉及流水线部分的浮点累加。

#pragma HLS pipeline r0[i] = a[i] + b[i];

例 14:通过运算处理相关性

} }

28

// Floating-point accumulator

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地 例 15:对运算进行显式的重排序,得到更高性能

float top(float x[32]) { #pragma HLS interface ap_fifo port=x

// Floating-point accumulator

float acc = 0;

float top(float x[32])

for (int i = 0; i < 32; i++) {

{

#pragma HLS pipeline

#pragma HLS interface ap_fifo port=x

acc += x[i];

float acc_part[4] = {0.0f, 0.0f, 0.0f, 0.0f};

}

// Manually unroll by 4

return acc;

for (int i = 0; i < 32; i += 4) {

}

// Partial accumulations 由于这种形式的累加会导致递归,浮点加法的延迟一般大

于一个周期,故该流水线不能实现一个周期一次累加的吞吐量。

for (int j = 0; j < 4; j++) { #pragma HLS pipeline acc_part[j] += x[i + j];

例如,如果浮点加法器的延迟是四个周期,则流水线初始

}

化间隔也是四个周期(请参阅图 2 所示关于 Vivado HLS 工具

// Final accumulation

综合的报告)。由于只有在完成一次累加之后才能开始另一次 累加,因此这个例子中所能实现的最大吞吐量是每四个周期完 成一次累加。累加循环迭代 32 次,每次行程耗时四个周期,

for (int i = 1; i < 4; i++) { #pragma HLS unroll acc_part[0] += acc_part[i];

最终共需要 128 个周期,以及用于清空流水线的附加周期。

} } return acc_part[0]; } 采用这种代码结构,Vivado HLS 工具能够通过交替周期 的方式将四次部分累加调度到一个加法器内核上,从而实现更 高效率的资源利用(见图 3)。后续的最终累加也可以根据其 他因素使用相同的加法器内核。现在主累加循环需要八次迭代 (32/4),每次迭代用四个周期完成四个部分累加。这样,完 成相同工作量所需的时间大大减少,而且只需多占用很少量的

图 2 - 在以上 Vivado HLS 报告中, “Pipeline Ⅱ =4 指出瓶颈所在。

一种性能更高的替代方法是在相同的加法器内核上穿插进 行四个局部累加,每四个周期完成一次局部累加,从而减少完 成 32 次加法运算所需的时间。但是 Vivado HLS 工具无法用 例 14 提供的代码实现这种优化方案,因为这需要变更累加的 运算次序。如果每次部分累加都将 x[] 的第四个元素作为输入, 那么单个加数的次序发生变化就会造成结果的不同。 避开这个局限的方法是对源代码进行小幅修改,让自己 的意图更加明显。下面的示例代码引入一个用于存储部分和的 数组 acc_part[4]。部分和随后进行加总,同时让主累加循环部 分展开。

2012 年冬季刊

图 3 - 在本报告中,流水线 II 仍然是四条,但行程数从 32 个 降低到 8 个。(图 3 与图 2 没有区别)

赛灵思中国通讯 46 期       29


专家园地 FPGA 资源。最终累加循环也使用相同的加法器内核,会使周

例 16:使用“RESOURCE”指令设定浮点运算器内核变量

期数量有所增加,但增加的数量是固定的,而且考虑到通过避 免展开主累加循环而节省的大量周期,这个增加值是很小的。

// Floating-point accumulator

可以进一步优化最终累加算法,但会造成性能面积比下降。

float top(float x[32])

在有更大 I/O 带宽的情况下,我们可以设定更大的展开因 数,让更多的算术内核承担运算任务。在上述的例子中,如果

{ #pragma HLS interface ap_fifo port=x float acc = 0;

每个时钟周期有两个 x[] 元素可用,就可以把展开因素增加到 8。 此时能实现两个加法器内核,每个周期能完成八个部分累加。 目标器件的选择和用户的时间约束会给具体的运算器延迟造成 影响。一般来说,有必要运行 HLS 并对较为简单的基础案例

for (int i = 0; i < 32; i++) { #pragma HLS pipeline #pragma HLS resource variable=acc \ core=FAddSub_nodsp

进行性能分析(如例 14 所示),用以判断理想的展开量。

acc += x[i]; }

控制实现资源 赛灵思 LogiCORE IP 浮点运算器内核能够控制一些运算 的 DSP48 利用率。例如,乘法器内核有四个变量,它们可以 用 逻 辑 资 源(LUT) 交 换 DSP48 用 量。 在 正 常 情 况 下, Vivado HLS 工具会根据性能约束自动判断需要使用哪类内核。 设计人员可使用 Vivado HLS 工具的 RESOURCE 指令覆盖自 动选项,并针对给定的运算设定所使用的浮点运算器类型。例如,

return acc; } 关于 RESOURCE 指令的详细使用介绍以及可用的内核 清单,敬请参阅《Vivado HLS 用户指南》 UG902[7]。 验证浮点计算的结果

对于例 14 中提供的代码,加法器一般会使用“全占用”内核的

用不同方式运行相同计算所得的浮点结果之间存在数位级

方式来实现,并使用 Kintex ™ -7 FPGA 上的两个 DSP48E1

(或者更高)的差异,这里面的原因有很多。误差会发生的位

资源。如综合报告(图 4)的“组件”部分所示。

置也不同,包括不同的近似算法、计算顺序的重新排序导致的 舍入差异、以及次正常值的处理(此时浮点运算器内核清零)。 一般来说,两个浮点值的比较结果(特别是相等比较), 可能造成误导。两个被比较的值可能只在“最后一位”(ULP; 二进制格式中的作用最小的位)存在差异,从而导致极小的相 对误差,造成“==”运算符号返回假值。例如,在使用单精

图 4 - 从本 Vivado HLS 报告可以看到,默认的加法器内核使用两个 DSP48E 资源。

下面的示例代码强制把加法运算映射到 FAddSub_nodsp 内核上,如图 5 所示。

度浮点格式的情况下,如果两个操作数都非零(也非次正常值), 1ULP 的差异代表 0.00001% 的相对误差。因此,在比较浮点 数时,应避免使用“==”和“! =”运算符。要检查两个值是 否“足够接近”,可以使用可接受误差阈值。 在大多数情况下,设置可接受的 ULP 或相对误差级就可 以,比设置绝对误差(或者“ε”)阈值要好。但是如果需要 比较的值中有一个是零(0.0),这种方法就失效了。如果比 较的值中有一个是恒零值或可以产生恒零值,那么就需要使用 绝对误差阈值。下面的示例代码提供了一种用于比较两个浮点 数近似相等的方法,便于您设置 ULP 和绝对误差限值。这个

图 5:如报告所示,现在加法器未使用 DSP48E 资源

函数可以用在 C/C++“测试台”代码中,用于验证 HSL 源代 码的修改情况,并验证 Vivado HLS 工具的 RTL 协同仿真。 您还可以在 HLS 的实现代码中使用类似的方法。

30

赛灵思中国通讯 46 期

2012 年冬季刊


专家园地 例 17:用于测试浮点值近似相等的 C 语言代码

比较法结合使用,用来判别含糊的结果。

// Create a union based type for easy access to

强大的功能

// binary representation typedef union {

在赛灵思 FPGA 上用 C/C++ 源代码轻松实现浮点算法硬 件(RTL 代码)是 Vivado HLS 工具所具备的一种强大功能。

float fval;

但浮点算法的使用不管是从软件的角度、硬件的角度还是混合

unsigned int rawbits;

的角度都并非像看上去那么直观。IEEE-754 标准二进制浮点

} float_union_t;

格式的非精确性给验证计算结果带来难度。另外,设计人员在

bool approx_eqf(

C/C++ 源代码层面以及应用 HLS 优化指令的时候,都必须额

float x, float y,

外小心,才能在 FPGA 资源利用和设计性能方面获得理想的

int ulp_err_lim, float abs_err_lim

结果。

)

关于更多实际操作的建议,请参阅“Vivado 高层次综合

{ float_union_t lx, ly; lx.fval = x; ly.fval = y; // ULP based comparison is likely to be meaningless // when x or y is exactly zero or their signs

产 品 ” 页:http://www.xilinx.com/products/design-tools/

vivado/integration/esl-design/hls/ ;Vivado 视频辅导:http:// www.xilinx.com/training/vivado/;以及“浮点运算器产品”页: http://www.xilinx.com/products/intellectualproperty/ FLOATING_PT.htm 。

// differ, so test against an absolute error // threshold this test also handles (-0.0 == +0.0), // which should return true. N.B. that the // abs_err_lim must be chosen wisely, based on

参考资料:

1. 用于二进制浮点算法的 ANSI/IEEE 标准,ANSI/IEEE 标准 754-2008;IEEE-754

// knowledge of calculations/algorithms that lead // up to the comparison. There is no substitute for // proper error analysis when accuracy of results // matter. if (((x == 0.0f) ^ (y == 0.0f)) ||

2. PG060,LogiCORE IP 浮点运算器 6.1 版产品指南 3. http://randomascii.wordpress.com/category/floating-point/ 4. http://docs.oracle.com/cd/E19957-01/8063568/ncg_ goldberg.html

(__signbit(x) != __signbit(y))) { return fabs(x - y) <= fabs(abs_err_lim); } // Do ULP base comparison for all other cases

5. http://www.lahey.com/float.htm 6. Adam Taylor,《FPGA 数学基础知识》,赛灵思期刊第 80 期,http://issuu.com/xcelljournal/docs/xcell80

return abs((int)lx.rawbits (int)ly.rawbits) <= ulp_err_lim;

7. UG902,《Vivado 设计套件用户指南:高层次综合 2012.2 版》;UG871,《Vivado 设计套件辅导:高层次综合

}

V2012.2 版》 关于应该将 ULP 和绝对误差阈值设置在什么水平这个问 题没有唯一的答案,因为设置会因设计而异。相对于基准结果 而言,复杂的算法可能会在输出中累加更多 ULP 误差。其他

关系运算符也可能会误导结果。例如,在测试某值是否小于(或 者大于)另一值时,误差仅有几个 ULP,这种情况下是否可 以做出合理的结论?我们可以将上面提供的函数与小于 / 大于

2012 年冬季刊

赛灵思中国通讯 46 期       31


A s k FA E - x

A s k FA E - x

Vivado HLS 简化浮点 PID 控制器设计 作者: Daniele Bagni 赛灵思公司 DsP 专家 电子邮箱:Daniele.bagni@xilinx.com Giulio Corradi 赛灵思公司 IsM 高级系统架构师 电子邮箱:Giulio.corradi@xilinx.com

这种全新的赛灵思综合工具可将手动流程实现 自动化,从而消除大量的设计错误来源,并加 速开发周期中极为漫长且经常反复操作的部分 的设计进程。

32

赛灵思中国通讯 46 期

2012 年冬季刊


A s k FA E - x

F

PGA 技术是一种强大且高度灵活的 PID 控制器实

PI(比例积分)或 PD(比例微分)来反馈。大型工厂使用成

现方法。由于 FPGA 器件拥有大量的并行资源,

千上万的 PID 控制器来监控其化学或物理工艺。在汽车和运

可为同步运算提供多个比例积分微分(PID)实例。

输系统中,PID 用于控制和保持发动机速度,确保平稳制动和

此外,FPGA 还能够在不影响此前设计的其它 PID 的性能的

控制众多转向功能;在电机中,PID 用于控制电机的电流和力

情况下,根据应用需求,灵活添加更多 PID 环路。如果在新

矩;而在机器人中,PID 则用于驱动和稳定机器人的手臂或腿 部的轨迹。PID 无处不在,就连医疗系统中也有其身影,例如

型赛灵思 Zynq ™ -7000 All Programmable soC 的可编程逻

用于控制 I 类糖尿患者的人工胰腺,模仿天然胰岛素分泌特征。

辑(或架构)中实现 PID,可以获得更多新的优势,因为功能

实际上生物系统自身也使用反馈来控制刺激反应,比如说视网

强大的板上 ARM® Cortex ™双 A9 核处理系统可以直接利用

膜系统适应光照的过程。

FPGA 的功能。

典型的反馈控制系统由设备(即待控制的机械或电气系统) 但是,FPGA 器件一般要求使用 VHDL 或 Verilog 等寄存

和 PID 控制器组成。数模(D/A)转换器将控制输出转换为适

器传输级(RTL)设计语言,这可能与控制工程师的知识背景

当的设备输入,而模数(A/D)转换器则将设备的输出转换为

存在一定的差距,会妨碍 FPGA 技术的使用。为消除这种差距,

反馈信号。图 1 是 PID 工作原理图。简单地说,PID 控制器

赛灵思新推出 Vivado 高层次综合(HLs)设计工具。这种工

将负责处理传感器测出的设备输出值 y(n) 和基准输入值 w(n)

具能够将 C、C++ 或 system C 设计规范转换为 RTL 实现方案,

之间的信息差 e(n),也称为“误差”,然后对系统的激励器进

以便综合到赛灵思 FPGA 中。这种转换只需要对常见的 C 或

行校正,以达到所需的命令输出值。PID 的每一个部分都对应

C++ 代码稍作调整,因此不会造成严重的知识脱节。

一种特定的行为,或称为“模式”。P 行为根据误差的大小驱

另外,近年来电气驱动器和机器人也正在设法进军联网控

动控制器输出 u(n)。I 行为消除稳态偏移,但可能会降低瞬态

制系统的范畴,这类联网系统在配备有通信信道的环路中使用

响应速度。D 行为负责评估趋势,预测输出校正,从而提高系

PID。在这类应用中,FPGA 实现的确定性和速度占巨大优势。

统的稳定性,减少过冲并改善瞬态响应。

ยԢ 00

एጚ๼෇ኵ w(n)

႑ࡽ݀ิഗ

+ + ཁे

ဃֶ e(n)

up PID(z) ૗ො PID ੦዆ഗ

y

u lo

u(n)

Saturation

1 z+0.5

y(n)

1 ๼‫؜‬

૗ො‫د‬๼ࡧຕ

ԏࢅ

图 1 - 闭环中的一般离散控制系统

但是由于还是需要与软件通信协议栈互动,系统架构师和控制

没有反馈控制的系统被称为开环,其传输函数(系统输入

工程师往往牺牲性能来换取全软件实现。庆幸的是,Vivado 提供

映射到输出的方式)的相移在单位增益下不得超过 180°。开

了一种更简单、更通用的实现方法,可避开这种取舍。Vivado 只需

环的相位滞后度和单位增益下的相移(180°)之间的差异被

通过把 C 或 C++ 代码重新映射到 Zynq-7000 All Programmable

称为“相位裕量”。系统增益和相移一般表达为拉普拉斯转换

soC 器件的 FPGA 架构上,就可以显著改善已开发出的联网

的模拟域 s,或者 Z 转换的离散域 z。假定 P(z) 和 H(z) 分别

控制系统的性能。

为设备和 PID 控制器的离散转换函数,则整个闭环系统的转 换函数可表达为:

一种无所不在的器件 基本上所有自然和人为的控制系统均采用 PID 或其变体

2012 年冬季刊

赛灵思中国通讯 46 期       33


A s k FA E - x

Proportional Stage w(n)

+–

+ + +

Kp

e(n)

Kd

1e-5

2.38z2+4.76z+2.38

y(n)

z2-1.903z+0.9048 Plant

Derivation Stage 2z-2 (2*Tf+Ts)z+(Ts-2*Tf)

y(n)

Ki*Ts/2 Integral Stage z+1 z-1

Figure 2 – An example of a digital PID controller and plant in a closed loop

PID 控制器的基准模型 下面举一个实际案例来说明使用 Vivado HLs 简化数字 分式 T(z) 的分子和分母中的 z 的值分别称为零点和极点。

PID 控制器设计工作的优势。在这个设计案例中,我们考虑

PID 的相位滞后进入环路,会增加总的相位滞后。因此,一个

一个只有一个环路和一部直流电机的设备。因此转速是输出,

高速的 PID 应尽量降低这种滞后。在理想的情况下,PID 的响

电压是输入。

应时间应该是瞬间的,就像模拟控制器一样。因此 PID 的计

该设备可表达为等式 1,用于表达拉普拉斯域的开环传输

算速度尤为重要。在闭环系统中,必须确保稳定性,尤其是对

函数。这里略去了直流电机和转子的传输函数的详细微分计算:

机器人系统或电机驱动器这样的高端应用而言,更是如此。如 果不稳定,控制环路的响应会发生寄生振荡,或是响应迟缓。

稳定性可通过 PID 控制器极点和零点的补偿来实现,从而让 闭环系统尽可能实现最佳性能(增益和相位特性)。 在机器人和定位系统中,不管是单个 PID 环路还是级联 环路都存在一定的复杂性。例如,力矩由电流环路 PID 控制, 电机速度由与电流 PID 级联的速率 PID 控制,而位置则由与

等式 1 其中 a、b、c、d 是设备的数值参数。等式 2 是 PID 控制器的 传输函数。

速度 PID 级联的空间 PID 控制。在这种情况下,用软件顺序 执行每一个 PID 环路的方法来降低总体计算延迟,效率会越 来越低。

等式 2

许多用于电力驱动器和机器人的 PID 设计依赖浮点 C、 C++ 实现方案,这对控制工程师来说往往是最熟悉的表达方式。 使用高速微处理器、微控制器或 DsP 处理器就能够轻松地修

其 中 U(s) 和 E(s) 分 别 是 PID 输 入 和 输 出 信 号 u(n) 和 e(n) 的拉普拉斯转换。kp、kI 和 kD 分别为比例级、积分级 和微分级的增益。

改软件,无需花太多时间来设计更多硬件,直接就可以在软件 中实现许多高难度的控制结构。

梯形积分的 Tustin 近似法就是将传输函数从拉普拉斯域 转换到 Z 域的方法之一。这样设备(等式 1)和 PID(等式 2) 的传输函数的数字化形式分别表达为等式 3 和等式 4:

34

赛灵思中国通讯 46 期

2012 年冬季刊


A s k FA E - x

% dummy parameters to generate a PID Kp=1; Ki=1; Kd=1; Tf=20; C_be = pid(Kp, Ki, Kd, Tf, Ts, ... ‘IFormula’,’Trapezoidal’, ... ‘DFormula’,’Trapezoidal’); % tuning the PID with more % suitable parameters contr_d = pidtune(plant_d, C_be) Kp = contr_d.Kp; Ki = contr_d.Ki; Kd = contr_d.Kd; Tf = contr_d.Tf;

图 3 - 阶跃输入信号的闭环系统响应

sys_d = feedback(contr_d*plant_d,1); % closed loop system figure; step(sys_d); title([‘Closed-loop output to step ‘ ... ‘signal: Kp=’,num2str(contr_d.Kp), ... ‘ Ki=’, num2str(contr_d.Ki), ... ‘ Kd=’, num2str(contr_d.Kd)]); axis([0 2.0 0 1.5]); grid;

等式 3 等式 3 和等式 4 可分别正式写成等式 5 和等式 6:

等式 4

等式 5

其中 TF 和 Ts 分别为微分滤波时间和采样时间。图 2 是由 PID 控制器模块和设备组成的离散系统。 Mathworks 的控制系统工具箱 MATLAB 和 simulink 是一 种设计和仿真模拟及数字 PID 控制系统的强大工具。下列

等式 6

MATLAB 代码用于提供 PID 控制器参数。图 3 所示的是闭环 系 统 对 阶 跃 输 入 信 号 的 响 应,PID 参 数 设 为 kP=35.3675、

其中

kI=102.2398、kD=0.29161。

Ts = 1/100; t = 0 : Ts : 2.56-Ts; % (Laplace transform) transfer function of % the continuous system to be controlled a=1; b=1; c=10; d=20; num=a; den=[b c d]; plant = tf(num,den); % (Z transform) transfer function of % the discrete system plant_d = c2d(plant, Ts, ‘tustin’)

通过逆向转换等式 5 和 6,得到等式 7 的公式,用于给离 散 时 间 域 中 的 PID 控 制 器 和 设 备 模 块 建 立 模 型, 如 下 列 MATLAB 代码段所示:

2012 年冬季刊

赛灵思中国通讯 46 期       35


A s k FA E - x

1e-5*(2.38*u(i) + 4.76*u_z1 + ...

2.38*u_z2);

y_z2 = y_z1; y_z1 = y(i); u_z2 = u_z1; u_z1 = u(i);

等式 7 w = ones(1, numel(t)); w(1:4) = 0; C = (contr_d.Ts - 2*contr_d.Tf) / ... (contr_d.Ts + 2*contr_d.Tf); Gd = 2*contr_d.Kd / (contr_d.Ts + ... 2*contr_d.Tf); Gi = contr_d.Ki * contr_d.Ts/2;

end figure; plot(t, y, ‘g’); grid; title ‘Closed Loop Step: plant+contr’; 使用 VIVADO HLS 实现的 PID 设计的性能 Vivado HLs 是最新一代赛灵思设计工具。它能够用 C、

Gp = contr_d.Kp;

C++ 和 system C 编写的高级规范自动生成生产质量级 RTL

% closed loop

而消除众多设计错误来源,并加速开发周期中极为漫长且经常

e_prev = 0; % e(n-1)

反复操作的部分的设计进程。

yi_prev = 0; % yi(n-1) yd_prev = 0; % yd(n-1) y_z1

= 0; % y(n-1)

y_z2

= 0; % y(n-2)

u_z1

= 0; % u(n-1)

u_z2

= 0; % u(n-2)

for i = 1 : numel(w)

实现。换句话说,Vivado HLs 可实现手动流程的自动化,从

Vivado HLs 在设计中采用了两种截然不同的综合方法。 其中算法综合负责取出函数内容,在一定数量的时钟周期里, 把功能描述综合到 RTL 描述。而接口综合则负责把函数参数 转换为有特定时序协议的 RTL 端口,以便设计与系统中的其 它设计通信。可以在全局变量、顶级函数参数和顶级函数返回 值之上运行接口综合。 综合流程分步执行。第一步是抽取 C 代码推断的控制与 数据路径。接口综合会影响算法综合可实现的结果,反之亦然。

% error e(i) = w(i) - y_z1; % CLOSED LOOP % derivation yd(i) = -C*yd_prev + e(i) - e_prev; yd_prev = yd(i);

与任何手动 RTL 设计中得到的众多决策一样,结果将是大量 可用的实现和优化以及数量更大的根据其相互影响关系得到的 变体。Vivado HLs 让用户从这些细节中脱身,以最短的时间 高效率地确定最佳设计。Vivado HLs 根据自身的默省设置, 加上用户设定的约束和指令,迅速创建出最佳实现方案。 Vivado HLs 的核心流程是调度和捆绑。调度流程负责向

% integration

特定时钟周期分配每一次运算。调度流程中制定的决策需要考

yi(i) = yi_prev + e(i) + e_prev;

虑时钟频率、时钟非确定性、器件技术库的时序信息以及面积、

yi_prev = yi(i); e_prev = e(i);

时延和吞吐量指令等诸多因素。捆绑是用于判断何种硬件资源 或者内核用于每次调度操作的流程。例如,Vivado HLs 会自

% PID

动判断是否同时使用加法器和减法器,或者是否单个加法减法

u(i) = e(i) * Gp + Gd*yd(i) + Gi*yi(i);

器就能处理两次运算。因为捆绑流程制定的决策会影响运算的 调度,比如用流水线化的乘法器代替标准的组合乘法器,因此,

% plant y(i) = 1.903*y_z1 -0.9048*y_z2 + ...

36

调度过程中应考虑捆绑决策。 Vivado HLs 通过如下方式可以加速验证和设计优化进程:

赛灵思中国通讯 46 期

2012 年冬季刊


A s k FA E - x

• 缩短以前的手动 RTL 创建流程,并根据功能 C 规范自 动创建 RTL,从而避免转换错误;

• 迅速方便地完成多种架构的评估,致力于打造出理想 解决方案。 使用功能 C 规范替代 RTL 设计,加快仿真进程,尽早发 现设计错误。 C 代码实现与 MATLAB 模型极其相似,如下所示。假定 在现实世界中,PID 输入和输出信号达到用户能控制的饱和度。 PID 系数(等式 7 的 GI、GP、GD 和 C)以及 e(n) 和 u(n) 信

// effective input signal W = din[0]; // closed loop signal Y = din[1]; if (ResetN==0) { // reset INTegrator stage prev_INT = 0; // reset Derivative stage

号的最大值和最小值假定在任何函数调用中都是顺序加载在

prev_X1 = 0;

PID 内核上的。假定两个输入和输出信号也是相同的情况。

} // compute error signal E = W - Y

void PID_Controller(bool ResetN, float coeff[8], float din[2], float dout[2]) { // local variables for I/O signals float Gi, Gd, C, Gp, Y, W, E, U; // previous PID states: // Y1(n-1), X1(n-1), INT(n-1) static float prev_X1, prev_Y1;

pid_addsub = (pid_addsub>max_limE) ? max_limE : pid_addsub; E = (pid_addsub<min_limE) ? min_limE : pid_addsub; // Derivation // Y1(n) = -C * Y1(n-1) + X1(n) // X1(n-1) = X1 - (prev_X1+C*Y1)

static float prev_INT;

X1 = Gd * E;

// current local states:

pid_addsub = pid_mult + prev_X1;

// X1(n), X2(n) float X1, X2, Y1, Y2, INT; // local variables float max_limE, max_limU; float min_limE, min_limU;

pid_mult = C * prev_Y1; pid_addsub = X1 - pid_addsub; // update Y1(n) Y1 = pid_addsub; // Integrator // INT(n) = CLIP(X2(n) + INT(n-1))

float tmp, pid_mult, pid_addsub;

// Y2(n) = INT(n-1) + INT(n)

// get PID input coefficients

pid_addsub = prev_INT + X2;

Gi = coeff[0]; Gd = coeff[1]; C = coeff[2]; Gp = coeff[3]; max_limE = coeff[4]; max_limU = coeff[5]; min_limE = coeff[6]; min_limU = coeff[7]; // get PID input signals

pid_addsub = W - Y;

2012 年冬季刊

X2 = Gi * E; pid_addsub=(pid_addsub>max_limE)? max_limE : pid_addsub; INT = (pid_addsub<min_limE)? min_limE : pid_addsub; Y2 = INT + prev_INT; // output signal U(n) pid_mult = Gp * E; 赛灵思中国通讯 46 期       37


A s k FA E - x

图 4 - Vivado HLs 截屏所示的是同一 PID C++ 设计的两种备选解决方案的性能估计

pid_addsub = Y1 + Y2;

return;

tmp = pid_addsub + pid_mult;

}

tmp = (tmp > max_limU) ? max_limU : tmp; U = (tmp < min_limU) ? min_limU : tmp; // PID effective // output signal dout[0] = U; // test the PID error // signal as output dout[1] = E;

设定 Zynq-7010 CLG400-1 器件的目标时钟周期为 10 纳 秒,PID 实现在该 FPGA 的 32 位浮点算术单元中。首次运行 Vivado HLs(图 4 中的“solution1”),估计的时钟周期为 8.49 纳秒,与 FPGA 的 118MHz 时钟频率对应。由于生成输出需 要 49 个时钟周期的时延,有效数据速率为 2.4Msps。布局布 线前估计 FPGA 占用面积为 7 个 DsP48E slice,1,105 个触 发器和 1,790 个查找表。 通过分析 Vivado HLs 生成的报告文件,发现工具生成了 两个浮点加法减法器内核。因此采用下列指令:

// update internal states // for the next iteration prev_X1 = X1; prev_Y1 = Y1; prev_INT= INT;

38

set_directive_interface -mode ap_fifo "PID_Controller" coeff set_directive_interface -mode ap_fifo "PID_Controller" din

赛灵思中国通讯 46 期

2012 年冬季刊


A s k FA E - x

set_directive_interface -mode ap_fifo

ap_start

: IN STD_LOGIC;

"PID_Controller" dout

ap_done

: OUT STD_LOGIC;

set_directive_allocation -limit 1 -type

ap_idle

: OUT STD_LOGIC;

core "PID_Controller" fAddSub

coeff_empty_n : IN STD_LOGIC;

set_directive_allocation -limit 1 -type

coeff_read

: OUT STD_LOGIC;

core "PID_Controller" fMul

dout_full_n

: IN STD_LOGIC;

dout_write

: OUT STD_LOGIC;

din_empty_n

: IN STD_LOGIC;

din_read

: OUT STD_LOGIC;

ResetN

: IN

前三条指令在自动生成的 RTL 设计中设置待映射为 FIFO 端口的 I/O 函数参数,而后两条指令将限制浮点乘法器和加法 减法器数量,每个流程分配一个实例。 再次运行 Vivado HLs(图 4 中的“solution2”),估计 的时钟周期为 7.96 纳秒,与 FPGA 的 125MHz 时钟频率对应。 对 任 何 输 出 值, 有 50 时 钟 周 期 的 时 延, 有 效 数 据 速 率 为 2.5Msps。估计 FPGA 占用面积为 5 个 DsP48E slice,1,156 个触发器和 1,530 个查找表,这就是最理想的结果。图 4 的屏 幕截图对这两种解决方案的 Vivado HLs 综合估计报告进行了 比较。

STD_LOGIC_VECTOR ( 0 downto 0);

coeff_dout

STD_LOGIC_VECTOR (31 downto 0);

din_dout

: IN

STD_LOGIC_VECTOR (31 downto 0);

dout_din

: IN

: OUT

STD_LOGIC_VECTOR (31 downto 0));

下面的 RTL 代码段是 Vivado HLs 自动为顶级函数生成 的 VHDL。工具生成的接口信号以 clock reset(时钟复位) 和

end;

start(启动) 为输入端口,以 done(完成) 和 idle(闲置) 为输出端口。输入阵列 din 和 coeff 映射为输入 FIFO 端口, 故有 empty 和 read 信号。输出阵列 dout 映射为输出 FIFO 端 口,故有其 full 和 write 信号。

三个工作日 可以从 C 模型规范着手,利用有限的资源高效地将数字 PID 控制器实现在赛灵思 FPGA 器件中,甚至是在 32 位浮点 算术单元中。Vivado HLs 自动生成的 RTL 占用面积极小,

— RTL generated by Vivado(TM) HLS - High-

Zynq-7000 器件仅占用 5 个 DsP48E slice、1,156 个触发器

— Level Synthesis from C, C++ and SystemC

和 1,530 个 LUT。FPGA 时钟频率为 125MHz,有效数据速率

— Version: 2012.2 — Copyright (C) 2012 Xilinx Inc. All — rights reserved.

为 2.5Msps。仅三个工作日就得到这些设计结果,其中大部分 时间用于构建 MATLAB 和 C 模型,而非运行 Vivado HLs 工 具本身。运行仅花了半天时间。 与其他备选方法相比,这种方法具有明显的优势。尤其是

library IEEE; use IEEE.std_logic_1164.all;

Vivado HLs 负责将浮点 PID 直接映射到架构中。这样可以避

use IEEE.numeric_std.all;

免手动实现映射所需的中间步骤,从而改善项目的可移植性和

library work;

一致性,与一般需要三个工作日以上的手动转换相比,大幅度

use work.AESL_components.all;

缩短总开发时间。

entity PID_Controller is port (

ap_clk

: IN STD_LOGIC;

ap_rst

: IN STD_LOGIC;

2012 年冬季刊

赛灵思中国通讯 46 期       39


手把 手 课堂 : FP GA 1 0 1

手 把 手 课 堂:F P G A 10 1

把握赛灵思 FPGA 中的 主要时钟资源 作者:Sharad Sinha 博士生 高性能嵌入式系统中心 新加坡南洋理工大学 电子邮箱:Sharad_sinha@pmail.ntu.edu.sg

40

赛灵思中国通讯 46 期

2012 年冬季刊


手把手 课堂 :FPG A 101

把握 DCM、PLL、 PMCD 和 MMCM 知识 是稳健可靠的时钟设计 策略的基础。

灵 思 在 其 FPGA 中 提 供 了

位 匹 配 时 钟 分 频 器(PMCD) 可 用 于

丰富的时钟资源,大多数设

实现相位匹配分配时钟或相位匹配延

计 人 员 在 他 们 的 FPGA 设

迟时钟。

计中或多或少都会用到。不过对 FPGA 设 计 新 手 来 说, 什 么 时 候 用 DCM、 PLL、PMCD 和 MMCM 四 大 类 型 中 的 哪一种,让他们颇为困惑。赛灵思现有 的 FPGA 中没有一款同时包含这四种资

锁相环(PLL)和混合模式时钟管 理器(MMCM)处理的工作有许多是相 同的,比如频率综合、内外部时钟抖动 滤波、时钟去歪斜等。这两种资源也可 用于镜像、发送或再缓冲时钟信号。

源(见表 1)。 在深思设计实现细节时,把这些通 这四大类中的每一种都针对特定的 应用。例如,数字时钟管理器(DCM) 适用于实现延迟锁相环(DLL)、数字 频率综合器、数字移相器或数字频谱扩 展器。DCM 还是镜像、发送或再缓冲时

常用法记在心里,有助于理清时钟选择 的思路。对于长期产品发展规划而言, 在制定合适的时钟策略时,应考虑各个 器件系列之间的兼容性。下面让我们深 入了解一下这些时钟资源。

钟信号的理想选择。另一种时钟资源相

器件系列

DCM

PLL

PMCD

MMCM

Virtex-4

Virtex-5

有1

Virtex-6

有2

7 系列 FPGA

有2

Spartan-6

1. Virtex-5 中的 PLL 支持 Virtex-4 FPGA 的 PMCD 运行模式 2. 7 系列中的 MMCM 向后兼容

表 1 - 一些主要赛灵思 FPGA 系列中的时钟资源

2012 年冬季刊

赛灵思中国通讯 46 期       41


手把 手 课堂 : FP GA 1 0 1

您可以使用 DCM 将时钟源的输入时钟信号相乘, 生成高频率时钟信号。与此类似, 可以将来自高频率时钟源的输入时钟信号相除, 生成低频率时钟信号。 的 DCM 原语。

数字时钟管理器 顾名思义,数字时钟管理器(DCM) 是一种用于管理时钟架构并有助于时钟 信号成形和操控的模块。DCM 内含一个 延迟锁相环(DLL),可根据输入时钟 信号,去除 DCM 输出时钟信号的歪斜, 从而避免时钟分配延迟。 DLL 内含一个延迟元件和控制逻辑 链路。延迟元件的输出是输入时钟延迟

适当地与所有数据位的到达保持同步。

一般来说,DLL 与 PLL 类似。但与 PLL 不 同 的 是 DLL 不 含 压 控 振 荡 器

如果接收器使用发射时钟,可能会要求 延迟从发送端到接收端的时钟信号。

(VCO)。PLL 会一直存储相位和频率

有时设计可能需要一个更高的时钟

信息,而 DLL 只存储相位信息。因此,

频率来运行 FPGA 上的逻辑。但是,只

DLL 略 比 PLL 稳 定。DLL 和 PLL 这 两

有低频率输出的时钟源可以用。此时可

种类型都可以使用模拟和数字技术设计,

以使用 DCM 将时钟源的输入时钟信号

或者混合两种技术设计。但赛灵思器件

相乘,生成高频率时钟信号。与此类似,

中的 DCM 采用全数字化设计。

可以将来自高频率时钟源的输入时钟信 号相除,生成低频率时钟信号。这种技

所得。延迟时间取决于延迟元件在延迟

由于 DCM 可以在时钟路径上引入

链路中的位置。这种延迟体现为针对原

延迟,比如您就可使用 DCM 可以精确

始时钟的相位改变或相移,这就是所谓

地为 DRAM 生成行和列访问选通信号的

设计人员使用扩频时钟并通过调制

时序。与此类似,数据总线上的各个数

时钟信号来降低时钟信号的峰值电磁辐

据位可以在不同的时间到达。为了正确

射。未经调制的时钟信号的峰值会产生

对数据位采样,接收端的时钟信号必须

高电磁辐射。但经调制后,电磁辐射被

的 “ 数 字 相 移”。 图 1 所 示 的 即 为 Virtex-4 器件中的典型 DCM 模块。根据 Virtex-4 FPGA 用户指南(UG070,2.6

术称为“数字频率综合”。

版本)的介绍,Virtex-4 中有三种不同

CLKIN1

CLK0

CLKIN1

CLK0

CLKIN1

CLK0

CLK90

CLKFB

CLK90

CLKFB

CLK90

CLKFBIN

CLK180

RST

CLK270

PWRDWN

CLK180 RST PSINCDEC

CLK2X CLK2X180

PSEN PSCLK

CLK270 CLK2X CLK2X180

CLK180 RST PSINCDEC PSEN

CLK270 CLK2X CLK2X180

CLKDV

PSCLK

CLKDV

CLKDV

CLKFX

DADDR[6:0]

CLKFX

CLKFX

CLKFX180

CLKFX180

LOCKED

DWE

LOCKED

LOCKED

PSDONE

DEN

PSDONE

DO[15:0]

DCLK

DO[15:0]

DI[15:0]

CLKFX180

DRDY

图 1 - Virtex-4 FPGA 中的 DCM 原语

42

赛灵思中国通讯 46 期

2012 年冬季刊


手把手 课堂 :FPG A 101

CLKA1

DCM 将乘以输入扩频时钟信号,在内部

ODDR 触发器。当然也可以选择不使用

CLKA1D2

生成高频时钟信号。DCM 的输出必须准

DCM,仅使用 ODDR 来发送时钟信号。

RST

CLKA1D4

确地跟随扩频时钟,以保持相位和频率

往往时钟驱动器需要将时钟信号驱动到

REL

CLKA1D8

对齐并更新去歪斜和相移。DCM 相位

设计的多个组件。这会增大时钟驱动器

和频率对齐的恶化会降低接收器的歪斜

的负荷,导致出现时钟歪斜及其它问题。

裕量。

在这种情况下,需要采用时钟缓冲来平

CLKA

CLKB

CLKB1

CLKC

CLKC1

CLKD

CLKD1

建立时钟的镜像需要将时钟信号送

衡负载。

出 FPGA 器件,然后又将它接收回来。

时钟可以连接到 FPGA 上的一系列

可以使用这种方法为多种器件的板级时

逻辑块上。为确保时钟信号在远离时钟

钟信号去歪斜。DCM 能够把时钟信号从

源的寄存器上有合适的上升和下降时间

FPGA 发 送 到 另 一 个 器 件。 这 是 因 为

(从而将输入输出时延控制在允许的范

扩展到一系列时钟频率上,从而降低了

FPGA 的输入时钟信号不能直接路由到

围内),需要在时钟驱动器和负载之间

所有频点的辐射。一般来说,如果需要

输出引脚,没有这样的路由路径可用。

插入时钟缓冲器。DCM 可用作时钟输入

满足一定的最大电磁辐射要求和在

如 果 仅 需 要 发 送 时 钟 信 号, 那 么 使 用

引脚和逻辑块之间的时钟缓冲器。

FPGA 上执行高速处理的时候(比如说

DCM 将时钟信号发送到输出引脚,可以

通信系统中接收器使用的解串器),就

确保信号的保真度。另外也可选择在时

需要使用扩频时钟。因此,FPGA 中的

钟信号发送之前,将 DCM 输出连接到

图 2 - Virtex-4 FPGA 中的 PMCD 原语

最后,还可以使用 DCM 将输入时 钟信号转换为差分 I/O 标准信号。例如, DCM 可以将输入的 LVTTL 时钟信号转 换为 LVDS 时钟信号发送出去。

CLKIN1 CLKFBIN RST

CLKOUT0

CLKIN1

CLKOUT0

CLKOUT0B

CLKIN2

CLKOUT0B

设计人员可使用相位匹配时钟分频

CLKOUT1

器(PMCD)来生成相位匹配的分频输

CLKOUT1 CLKOUT1B

PWRDWN

CLKOUT2 CLKOUT2B CLKOUT3

CLKFBIN RST

CLKOUT1B

CLKINSEL DADDR[4:0] DI[15:0]

CLKOUT2 CLKOUT2B

率综合相似。PMCD 还能生成设计中相

CLKOUT3

位匹配但有延迟的时钟信号。在后一种

DWE

CLKOUT3B

情况下,PCMD 能够在输入时钟信号和

CLKOUT4

DEN

CLKOUT4

CLKOUT5

DCLK

CLKOUT5

其它 PMCD 输入时钟信号之间保持边缘

CLKOUT6

PSINCDEC

CLKOUT6

CLKFBOUTB

PSEN PSCLK

LOCKED

CLKFBOUT LOCKED

信 号 仅 按 2、4 和 8 分 频。 这 意 味 着

DO[15:0]

PMCD 生成的时钟信号的频率是输入时

DRDY

钟信号的 1/2、1/4 和 1/8。在如 Virtex-4

CLKFBSTOPPED MMCME_ADV 图 3 - Virtex-6 架构中的 MMCM 原语

的是,在分频器的值可配置的情况下, 赛灵思器件中现有的 PMCD 生成的时钟

CLKINSTOPPED

MMCME_BASE

对齐、相位关系和歪斜。与 DCM 不同

CLKFBOUTB

PSDONE

2012 年冬季刊

入时钟信号。这与分频时钟的 DCM 频

CLKOUT3B

CLKFBOUT

相位匹配时钟分频器

FPGA 这样的赛灵思器件中,PMCD 紧 邻 DCM 并与其位于同一列上。每一列 有 两 个 PMCD-DCM 对。 因 此 DCM 的 输出可以驱动 PMCD 的输入。

赛灵思中国通讯 46 期       43


手把 手 课堂 : FP GA 1 0 1 由于 DCM 还负责处理去歪斜,因

个 PLL。Virtex-6 器件中的 MMCM 没有

MMCM 上的综合属性,禁用自动插入功

此只要不需要去歪斜时钟,设计人员就

扩频功能,因此输入时钟信号上的扩频

能。 详 细 介 绍 请 参 阅 赛 灵 思 答 复 记 录

可以使用不带 DCM 的 PMCD。通过专

不 会 被 滤 波, 将 直 接 被 传 送 给 MMCM

AR#33849。

用引脚,还可以把一列中的两个 PMCD

输出时钟。但 Virtex-7 FPGA 的 MMCM

连 接 起 来。 图 2 是 Virtex-4 器 件 中 的

却有扩频功能。

PMCD 原语。详细内容请参阅 Virtex-4 FPGA 用户指南(UG070,2.6 版本)。

混合模式时钟管理器

在这样的问题,因为这些 FPGA 只得到

Virtex-6 FPGA 中的 MMCM 要求插

ISE 13.1 版 本 和 更 高 版 本 以 及 新 型

入一个校准电路,以便在用户复位或用

Vivado 设计套件的支持。Virtex-6 系列

户断电后确保 MMCM 正确运行。赛灵

中提供的 MMCM 间专用走线可便于用

思 ISE 设计套件 11.5 版本及更高版本能

户将全局时钟资源用于设计的其余部分。

另一种类型的时钟资源——混合模

够在设计的 MAP 阶段自动插入必要的校

式时钟管理器(MMCM),用于在与给

准电路。若使用赛灵思 ISE 的更早版本,

定输入时钟有设定的相位和频率关系的 情况下,生成不同的时钟信号。不过与 DCM 不同是,MMCM 使用 PLL 来完成 这一工作。Virtex-6 FPGA 中的时钟管 理 模 块(CMT) 有 两 个 MMCM, 而

对 7 系列器件中的 MMCM 就不存

图 3 显 示 了 Virtex-6 FPGA 中 的 MMCM 原语。各个端口的详细介绍请参

则需要使用赛灵思技术支持部提供的设

阅 Virtex-6 FPGA 时 钟 资 源 用 户 指 南

计文件手动插入校准电路。最后需要注

(UG362,2.1 版 本)。 图 4 显 示 了 赛

意的是,在本移植该设计,以便用 ISE 11.5 版本或更高版本实现时,必须手动 移 除 校 准 电 路, 或 通 过 适 当 设 置 每 个

Virtex-7 中的 CMT 有一个 MMCM 和一

灵 思 7 系 列 FPGA 中 的 MMCM 原 语, 有关详细介绍请参阅 7 系列 FPGA 时钟 资源用户指南(UG472,1.5 版本)。

锁相环

CLKIN1 CLKFBIN RST

CLKIN1

CLKOUT0

CLKOUT0B

CLKIN2

CLKOUT0B

用于频率综合。使用一个 PLL 可以从一

CLKOUT1

个输入时钟信号生成多个时钟信号。结

CLKOUT1B

合 DCM 使用,还可以用作抖动滤波器。

CLKOUT1 CLKOUT1B

PWRDWN

CLKOUT2 CLKOUT2B CLKOUT3

CLKFBIN RST CLKINSEL

CLKOUT2

DADDR[4:0]

CLKOUT2B

DI[15:0]

CLKOUT3

都提供有 PLL。Spartan-6 和 Virtex-5 中

DWE

CLKOUT3B

均有专门的“DCM 到 PLL”和“PLL 到

CLKOUT4

DEN

CLKOUT4

DCM” 走 线。Spartan-6 和 Virtex-5 中

CLKOUT5

DCLK

CLKOUT5

的 PLL 输出是非扩频的。对这两种器件

CLKOUT6

PSINCDEC

CLKOUT6

而言,如果设计使用多个不同时钟,都

CLKFBOUTB

PSEN PSCLK

CLKFBOUT CLKFBOUTB

LOCKED

MMCME2_BASE

LOCKED

具有宽范的配置范围,而 DCM 的输出 是 预 定 的, 不 可 配 置。PLL 和 DCM 的

DRDY

选择还是取决于设计的要求。不过如果

PSDONE

相 移 是 必 需 的, 就 应 该 明 确 地 选 择

CLKINSTOPPED CLKFBSTOPPED

图 4 - 赛灵思 7 系列 FPGA 中的 MMCM 原语

可 以 用 PLL 替 代 DCM。PLL 时 钟 输 出

DO[15:0]

MMCME2_ADV

44

Spartan-6、Virtex-5 和 7 系列 FPGA 中

CLKOUT3B

CLKFBOUT

设计人员使用锁相环(PLL)主要

CLKOUT0

DCM。 同时,7 系列器件中的 PLL 所实现 的功能没有 MMCM 所实现的多。因此

赛灵思中国通讯 46 期

2012 年冬季刊


手把手 课堂 :FPG A 101

CLKIN1

CLKOUT0

CLKIN1

CLKOUT0

CLKOUT1

CLKIN2

CLKOUT1

CLKFBIN

CLKOUT2

CLKFBIN

CLKOUT2

RST

CLKOUT3

RST

CLKOUT3

CLKOUT4

CLKINSEL

CLKOUT4

CLKOUT5

DADDR[4:0]

CLKOUT5

CLKFBOUT

DI[15:0]

CLKFBOUT

DWE

CLKOUTDCM0

DEN

CLKOUTDCM1

DCLK

CLKOUTDCM2

REL

CLKOUTDCM3 CLKOUTDCM4 CLKOUTDCM5 CLKFBDCM LOCKED

LOCKED

DO[15:0] DRDY PLL_ADV

PLL_BASE

图 5 - Virtex-5 FPGA 中的 PLL 原语

虽然 MMCM 是建立在 PLL 架构之上,

Virtex-6 和 7 系列中的 MMCM 能够与之

但 7 系列器件中也有独立的 PLL。图 5

前系列中的 DCM 向后兼容。但需要判

显示了 Virtex-5 FPGA 中的 PLL 原语。

断在多大程度上支持向后兼容性,因为

各个端口的详细介绍请参阅 Virtex-5 用

所有这些时钟资源都具有多功能性,提

户指南(UG190,5.4 版本)。

供与时钟相关的多种不同功能。在制定 产品长期发展规划时,必须对兼容性了

设计移植

如指掌。

掌握四种主要的时钟资源之间的差 异及其在不同器件系列中的可用性非常 重要。同时,在不同的系列中,相似的 资源(比如 DCM)可能在功能上并不完 全相同。例如,Spartan-6 FPGA 中的

如需了解 Sharad Sinha 的更多情况, 敬请访问他的博客:http://sharadsinha. wordpress.com。

DCM 支 持 扩 频 时 钟, 但 Virtex-5 和 Virtex-5 器件中的 DCM 就不支持。 在规划未来设计向更高端系列移植 时,除了确保功能,为给定设计选择正 确的时钟资源也很重要。如表 1 所示,

2012 年冬季刊

赛灵思中国通讯 46 期       45


手把 手 课堂 : FP GA 1 0 1

手 把 手 课 堂:F P G A 1 0 1

如何在 FPGA 中实现状态机 作者:Adam Taylor EADS Astrium 公司首席工程师 电子邮件地址:aptaylor@theiet.org

46

赛灵思中国通讯 46 期

2012 年冬季刊


手把手 课堂 :FPG A 101

状态机往往是 FPGA 开 发的主力。选择合适的架 构和实现方法将确保您获 得一款最佳解决方案。

F

PGA 常 常 用 于 执 行 基 于 序 列 和 控 制 的 行 动, 比 如实 现一 个简单 的通信 协议。对 于设 计人 员来说 , 满足这些行动和序列要求的最佳方法则是使用状

态机。状态机是在数量有限的状态之间进行转换的逻辑结 构。 一 个 状 态 机 在 某 个 特 定 的 时 间 点 只 处 于 一 种 状 态。 但 在 一系 列触 发器的 触发下 ,将 在不同状 态间 进行 转换。 理论上讲,状态机可以分为 Moore 状态机和 Mealy 状态机 两 大 类。 它 们 之 间 的 差 异 仅 在 于 如 何 生 成 状 态 机 的 输 出。 Moore 状态机的输出仅为当前状态的函数。典型的例子就是计 数器。而 Mealy 状态机的输出是当前状态和输入的函数。典型 的例子就是 Richards 控制器(参见 http://en.wikipedia.org/wiki/

Richards_controller )。 定义状态机 当需要定义一个状态机时,首先要绘制一张状态图。状态 图可用来显示状态、状态间的转换和状态机的输出。图 1 显示 了 Moore 状态机的状态图(左)和 Mealy 状态机的状态图(右)。 如果您要在物理组件中实现这些状态图(工程师在 FPGA 问世之前就是这么做的),首先就得生成当前状态和后续状态表, 然后生成实现状态机所需的逻辑。不过由于我们将使用 FPGA 来实现设计,因此我们可以直接从状态转换图开始工作。 算法状态图 虽然有许多状态机是使用图 1 所示的状态图方法进行设计 的,但另外还有一种描述状态机行为的方法,这就是算法状态 图法。ASM 图(图 2)在外观上更加接近软件工程流程图。它 由三个基本部分构成: 1. 状态框。它与状态名称有关,并包含 Moore 状态输出列 表。 2. 决策框。如果检验某条件为真,则进行下一状态的判断。 3. 条件输出框。让状态机根据当前状态和输入描述 Mealy 输出。 一些工程师认为,如果使用 VHDL 等硬件描述语言,则采 用 ASM 格式进行描述的状态机更易于映射到实现方案中。 MOORE 和 MEALY:应该选择哪个? 实现 Moore 状态机还是 Mealy 状态机,取决于状态机需要 实现的功能,以及特定的反应次数要求。两种状态机之间的最 大差别在于状态机如何对输入做出反应。在输入和设置的适当 输出之间,Moore 状态机一般有一个时钟周期的延迟。这就意 味着 Moore 状态机无法对输入变化立即做出反应,这点在图 3 中可以清楚地看到。而 Mealy 状态机则能够立即对输入做出反 应,这通常意味着:实现相同的函数,Mealy 状态机比 Moore

2012 年冬季刊

赛灵思中国通讯 46 期       47


手把 手 课堂 : FP GA 1 0 1

IDLE 0

IDLE

Start

Start 1 Toggle 0

Toggle LED_OFF 0

Toggle

LED_ON 1

Toggle 1

LED_OFF

LED_ON

图 1 - 用于开 / 关 LED 的 Moore 状态机(左)和 Mealy 状态机(右)的状态图

状态机需要更少的状态。Mealy 状态机的不足之处就是在与另 一个状态机进行通信时,如果输出出乎意料地严重依赖于其它 事件的序列或时序,就可能会发生紊乱情况。

Idle

当然,并非只能使用单纯的 Moore 状态机或 Mealy 状态机,

Idle

Op = 0

也可以将这两种状态机混合使用,从而更有效地实现所需的函 数。比如说,用于接收 RS232 串行数据的状态机就可以是混 合机。

1

Start

0

1

Start

Led_on

实现状态机 使用 VHDL 这样的高级语言,可以轻松地直接从状态图

Op = 1

Op = 1

Led_on

实现状态机。VHDL 支持多种枚举类型,方便您定义实际的状 态名称。举例如下:

1

TYPE state IS (idle, led_on, led_off) ;

0 1

Toggle

0

Op = 0

按下按钮时切换发光二极管开 / 关的状态机。

基本方法就是一次性将所有内容集成到单个进程中。第二类基

Toggle

Led_off

上面的类型定义对应的是图 1 中所示的状态图,即用于在

实现状态机有许多种方法,可分为两类基本方法。第一类

0

Op = 0 1

Toggle

Led_off

0

本方法是双进程法,将组合逻辑和顺序逻辑分开。 一般来说,大多数工程师都倾向于实现单进程状态机。与

1

传统上讲授的双进程法相比,这种方法具有以下优势:

Toggle

0

• 可以避免组合过程中信号覆盖不完全造成的闭锁风险。 • 状态机的输出与时钟保持同步。 • 通常比双进程实现方案更容易调试。

48

图 2 - 用于图 1 所示的状态机(Moore 状态机(左), Mealy 状态机(右))的算法状态图

赛灵思中国通讯 46 期

2012 年冬季刊


手把手 课堂 :FPG A 101 无论您决定采用哪一种方法来实现状态机,都需要使用 CASE 语句来评估下一状态的判定和任何输出,如图 4 所示。 该 图 并 行 比 较 了 使 用 单 进 程 法 的 Moore 状 态 机( 左) 和 Mealy 状态机(右)。

时还需要考虑您选择使用的综合工具。您可以根据下列经验法 则来选取编码方法: • 顺序:少于 5 种状态。 • 独热:5-50 种状态。

状态机编码

• 格雷:多于 50 种状态。

状态变量存储在触发器中,使用下一时钟边缘上的下一状 态进行更新(即使没有状态变化也是如此)。如何使用触发器 来表示状态值具体取决于状态的数量和是否选择用某种特定的 方法来管理综合工具。状态编码最常见的三种类型是:

一般情况下您不必去考虑使用哪一种状态编码方法,而是 让综合引擎工具确定合适的实现方案,只在选择的方法出现问 题时进行考虑。但是,如果您要全盘自行掌控,并定义状态编 码方法,也没必要手动操作,只需使用状态编码为每一种状态

• 顺序码——状态编码遵循传统的状态二进制序列。

设定常数即可。相反地,可以使用代码中的一个属性来驱动综

• 格雷码——除了状态编码使用格雷码,且状态编码串

合工具,从而选择特定的编码方法。具体如下所示:

之间只有一个位变化外,其它基本与顺序编码方法 类似。 • 独热码——这种方法在状态机中为每一种状态分配一

TYPE state IS (idle, led_on, led_off) ; SIGNAL current_state : state := idle;

个触发器。只有一个触发器当前设置为高位,其余均

ATTRIBUTE syn_encoding STRING;

设置为低位。故称为“独热”。

ATTRIBUTE syn_encoding OF current_state :

顺序编码和格雷编码都需要一定数量的触发器,可以通过 下列等式来确定:

SIGNAL IS “sequential”; 其中“sequential”也可以是“gray”和“onehot”。您 还可以通过结合使用“safe”属性来确保在状态机进入非法状

 LOG10 (States)   FlipFlops = Ceil   LOG10( 2) 

态时能够恢复到有效状态。 另外,您也可以使用 syn_encoding 属性直接定义状态编 码的值。例如,假设您想要使用下列状态编码法来对三态状态

相比之下,独热编码法所需的触发器数量和状态数量一 样多。

机进行编码:Idle = “11,” led_on = “10,” led_off = “01(与 较传统的顺序“00”、“01”和“10”不同):

状态编码的自动分配取决于状态机所包含的状态数量。同

图 3 - 截屏显示了 Moore 状态机(上)和 Mealy 状态机(下)输出的仿真结果

2012 年冬季刊

赛灵思中国通讯 46 期       49


手把 手 课堂 : FP GA 1 0 1

图 4 - 使用 VHDL 语言的 Moore 状态机(左)和 Mealy 状态机

TYPE state IS (idle, led_on, led_off) ;

到这一点有两种主要的方法。第一种方法是使用综合工具实现

SIGNAL current_state : state := idle;

一个安全的状态机。综合工具通常会插入额外的逻辑,用于检 测非法状态并将状态机返回到有效状态。第二种方法是加强对

ATTRIBUTE syn_encoding STRING;

实现逻辑的控制,声明所有 2 的幂次方状态机的状态,并使用

ATTRIBUTE syn_encoding OF current_state :

另一属性来确保即便是在没有入口条件下,2 的幂次方状态机 的状态也不会被优化掉。这意味着除非出错(单粒子翻转等),

SIGNAL IS “sequential”;

状态机内部的任何条件都不会进入状态。下面的代码显示了通

工程师负责在综合工具中使用正确的设置,以确保该工具

过使用属性以防止清除未使用的状态。

不会忽略任何属性。例如,赛灵思 XST 工具要求将 FSM 选项 设置为 USER,而 Synopsys 的 Synplify 则要求关闭 FSM 编

TYPE state IS (idle, led_on, led_off) ;

译器。

SIGNAL current_state : state := idle;

前面给出的等式可确定状态机实现方案所需的触发器数 量。由于不是所有的状态机都是 2 的幂次方,因此某些状态在 设计中将不会用到。实现状态机的工程师必须负责确保未使用 的状态在设计中得到妥善处理。可以采用几种适用于多种设计 的基本技巧来实现这一目标。对于高度可靠的安全关键型设计,

ATTRIBUTE syn_keep BOOLEAN; ATTRIBUTE syn_keep OF current_state : SIGNAL IS TRUE” 简而言之,安全高效的状态机设计对于任何使用 FPGA

则需要采用其它更高级的技巧。(参见 Xcell 杂志第 73 期刊

的工程师而言都是一项重要技能。选择 Moore 状态机、Mealy

登的深度文章《在关键任务系统中使用 FPGA》。该文章着重

状态机还是混合机取决于整个系统的需求。无论选择哪种类型

阐述状态机保护问题。)

的状态机,充分掌握实现方案所需的工具和技巧,将确保您实

不过对于大多数应用来说,只需要确保状态机能够妥善地

现最佳解决方案。

处理未使用的状态并在进入非法状态时能够正确地恢复。要做

50

赛灵思中国通讯 46 期

2012 年冬季刊


出色的工具

出色的工具

解决故障! 更智能的调试与综合技术将帮助您隔离错误,确保 FPGA 设计 在开发板上正常工作。

2012 年冬季刊

赛灵思中国通讯 46 期       51


出色的工具

作者:Angela Sutton Synopsys 公司产品市场营销经理 Sutton@synopsys.com

果您的 FPGA 设计无法综合或者没能按

预期在开发板上正常工作,原因往往不

明,要想在数以千计的 RTL 和约束源文 件中找出故障根源相当困难,而且很多

这些文件还可能是其他设计人员编写的。

考虑到 FPGA 设计迭代和运行时间的延长,设计人员应该 在设计流程的早期阶段就找出可能存在的诸多错误,并想 方设法重点对设计在开发板上进行验证。 在特定条件下采用更智能的技术来隔离特定错误, 找到问题电路的源头并渐进式修复错误,这很 重要。为了节省时间,您可以对时钟、约 束和模块级接口进行初步设置检查以确 保符合设计规范,这样就不必在综合与布 局布线(P&R)时浪费大量时间。 Synopsys 公 司 的 Synplify Premier 和 Synplify Pro FPGA 设计工具以及 Identify RTL Debugger 等产品能帮助 设计人员完成上述工作。这些工具的特性使得设计人员能 快速隔离错误,有效缩短运行时间,并减少开发板启动所 需的迭代次数。 精确找到开发板上的问题 如果开发板出现明显的功能性错误,要缩小查找问题 根源的范围可能会相当困难。为了进行设计调试,我们应 当创建附加电路并保留某些节点,以便我们对设计运行时 得到的数据进行探测、检查和分析。下面我们就看看如何 用板级调试软件来查找错误。 按下列四步法并利用 RTL 调试器,您能精确查找问题, 并对信号和关注的条件采样,然后将观察结果关联至原始 RTL,从而将问题锁定在 RTL 规范或约束设置范围内。 第一步:指定探测。在 RTL 中明确要监控哪些信号和条件。 在此要声明您所感兴趣的观察点(要观察的信号或节点) 和断点(RTL 控制流程声明,如 IF、THEN 和 CASE 等)。 第二步:通过探测构建设计。利用附加的监控电路——即 用于根据您的监控要求捕捉并导出调试数据的智能内部电 路仿真器(IICE)——对 FPGA 设计进行综合。 第三步:分析和调试。设计综合完成之后,运行设计并用 RTL 调试器观察数据。在开发板上运行测试时,观察点和 断点共同触发数据采样,使您能在您所关注的非常明确的

2012 赛灵思中国通讯 462012 期       52 52 年冬季刊 赛灵思中国通讯 46 期 年冬季刊


出色的工具 条件下观察并调试特定节点的电路的行为。您可将观察到的采

的加法器、寄存器、大型多路选择器和状态机等组件构成。通

样数据写入 VCD 文件并将其关联到 RTL。

过 RTL 原理图,您可以交叉探测原始 RTL,对不符合预定规

第四步:渐进性修复错误 (incremental fix)。一旦找到了错误

范的设计进行调整,同时也可以探测到约束编辑器,从而更简

所在,就可以通过分级、渐进式流程在 RTL 或约束中渐进地

便地更新和指定约束(图 1)。 要将错误操作的源头追溯到 RTL,您可以利用 RTL 调试

进行修复。

器在 RTL 原理图上方实时插入观察到的操作数据。 时序和功能性错误的可视检查 FPGA 设计和调试工具还有一大优点,就是能显示 RTL 和网表级原理图。举例来说,具有互动调试功能的原理图查看 器能够显示设计的 RTL 和网表原理图,便于您进行观察并将

原理图查看器包括一个网表级技术视图,用于显示综合后 的实际设计实现情况。在 HDL Analyst 原理图查看器中,该视 图基于查找表、寄存器和 DSP slice 等基本的赛灵思器件原语。 您可在原理图中对路径进行交叉探测,追溯到原始的 RTL 以

时序报告和 VCD 数据(设计在开发板上运行时产生)关联至

及综合后和布局布线后的最终时序报告,以便分析和提高整体

RTL 源文件。查看器包含一个 RTL 视图,用来以图示的方式

性能。

描述设计。该视图在综合 RTL 编译阶段后提供,由技术独立

图 1 - 可利用原理图查看器中对 RTL 视图中的 RTL 和约束进行调试。在此,您可以将约束与设计规范进行关联, 然后将约束直接拖放到约束编辑器中进行调整或更新。

2012 年冬季刊

赛灵思中国通讯 46 期       53


出色的工具

在 FPGA 中原型设计的 ASIC 门控时钟结构并非 FPGA 实现中的必要环节,这会导致 FPGA 资源使用效率 低下。解决该问题的有效办法就是用 FPGA 综合软 件转换时钟。 大型设计的调试 在大型设计中探测所有信号是不可能,因为生成的数据量

– 在 GCC & Prototyping Tools 标 签 中 点 击 Clock Conversion checkbox

极为庞大,而且探测数据所需的额外调试逻辑也太大。片上调

或在 TCL 中使用以下命令

试方法的一个常见弊病是难以提前预测需要对哪些信号进行探

set_option -fix_gated_and_generated_ clocks 1

测和监控。 一些调试软件通过分治法能够在一定程度上解决这个问

在 Synplify Pro/Premier 中执行门控和生成时钟转换,而

题。利用多路复用的采样组,设计人员可以有选择性地进行采

set_option -conv_mux_xor_gated_clocks 1

样并通过多路复用的路径和共享的 IICE 在信号组之间切换。

则针对基于 Synopsys HAPS 的设计在 Synplify Premier 时钟

这种方法增加了可观察的信号和条件,而且不会增加数据存储

树的多路选择器或 OR 门上执行门控时钟转换。

要求。您可以即时切换感兴趣的信号组,不必花时间进行重新 调整或重新综合新的设计。 不幸的是,在探测和采样数据时用使的调试 IICE 逻辑会

在生成的时钟之间定义关系。有时候,时钟会出于某种原因与

占用包括存储器 BRAM 在内的芯片资源。您可在 SRAM 存储

真正的源断开关联,例如时钟源和时钟目标端间产生了黑盒,

卡中对 IICE 采样数据进行片外存储,以减少片上 BRAM 的使

这样会造成顺序组件的时钟缺失或时钟约束放置错误,导致首

用。这种方法的另一个好处是能增加采样数据的深度。

次时钟转换因为缺少时钟约束而失败。在许多情况下,转换失

我的设计无法综合 设计错误的出现可能导致无法实现有效综合或布局布线。 由于存在成千上万的 RTL 和约束源文件,因此可能需要几个 星期才能完成首次综合与布局布线。进行 FPGA 原型设计时, 应让 ASIC 设计源文件处于“FPGA 就绪”状态。举例来说, 就是要进行门时钟转换。 在 FPGA 中原型设计的 ASIC 门控时钟结构并非 FPGA 实现中的必要环节,这会导致 FPGA 资源使用效率低下。解 决该问题的有效办法就是用 FPGA 综合软件转换时钟。例如, 门控或生成时钟转换功能可将生成时钟和门控时钟逻辑从顺序 组件的时钟引脚转移到使能引脚,这样您就能将顺序组件直接 绑定到源时钟,消除偏移问题,并减少设计中所需的时钟源数 量,进而节约资源。 在 Synplify Premier 软件中启用门控时钟选项: – 选择 Project->Implementation Options

“完整”的系列时钟约束包括在所有正确位置定义时钟并

54

败是由约束不完整造成的。举例来说,门控逻辑中可能存在一 个组合回路,应在时钟转换之前利用异常处理约束将其打破。 综合编译阶段之后会提供一个门控时钟报告,告诉您有哪些门 控和生成时钟已被转换以及被转换时钟的名称、类型、分组和 相关约束。另一个时钟列表则显示的是未转换的时钟,并包含 故障信息,用于说明原因。图 2 给出了报告实例。 举例来说,如果设计中有黑盒子,您可以在 RTL 中指定 具体的软件命令,用于为自动化门控时钟转换提供辅助。比方 说,采用 syn_gatedclk_clock_en 指令在黑盒子中指定启用引 脚的名称,用 syn_gatedclk_clock_en_polarity 指令指出黑盒子 上时钟使能端口的极性。每个转换实例和驱动实例的时钟引脚 都被赋予一个可搜索的属性,从而能在设计数据库中识别,并 提取到定制 TLC/Find 脚本生成报告中。

端口不匹配 设计包含公司内外部提供的文件。在设计中进行 IP 实例

赛灵思中国通讯 46 期

2012 年冬季刊


出色的工具

图 2 - 在综合编译完成后立即检查门控时钟报告,找出哪些时钟未能成功转换,原因是什么。添加一组更加完整的时钟约束, 在所有正确位置定义所有时钟并规定生成时钟间的关系,这样可以解决这个问题。

化或预验证分级模块时,经常会出现“端口不匹配”错误,而 且难以检测,特别是出现在混合语言设计中更是如此。举例来

约束的清除 指定充足且正确的约束将影响到结果质量和功能。约束声

说,如果顶层 VHDL 实体“Top”实例化 Verilog 模块“sub”,

明通常应包括三个元素:主时钟和时钟组定义、异步时钟声明、

那么顶层 VHDL 声明 sub 有 4 位端口,而实际 Verilog 模块只

错误和多循环路径声明。

有 3 位端口。就 Synplify Premier 软件而言,会立即将其标记 为不匹配,并在单独的日志报告中通过超级链接引用该错误。 视图 work.sub.syn_black_box 和视图 work.sub.verilog 之

进行综合之前检查约束是一个很好的方法。提供约束查看 器的工具能发现语法错误并分析时序约束和实例名称是否适 用,警示问题所在。比方说,它会报告通配符扩展后约束如何

间的接口不匹配

应用以及在定义时钟约束后产生的时钟关系。它会标出那些由

细节:

于参数或对象类型无效或不存在而未被应用的时序约束。 进行综合之前,在 Synplify Pro/Premier 软件中生成名为

======== 源视图 work.sub.syn_black_box 中的以下位端口在目标视 图 work.sub.verilog 中不存在。 =======================================

projectName_cck.rpt 的约束检查器报告: Synplify Pro/Premier GUI: Run -> Constraint check 或采用 TCL 命令:project -run constraint_check

Bit Port in1[4]

Bit Port in2[4]

报告”,提醒您注意那些在一个时钟域启动而在另一个时钟域

Bit Port dout[4]

中结束的路径。

注意,要避免潜在的 Meta 不稳定性,应运行“异步时钟

在 Synplify Pro/Premier 软 件 中 生 成 时 钟 同 步 报 告 多级层次中,如何将不匹配问题追踪到问题模块的 RTL 定义呢?工具应以某种方式给所有模块实例打标签,比方说采 用 orig_inst_of 属性。属性的值包括模块的原始 RTL 名称,可 方便地检索至 RTL。例如,假设 sub_3s 导致端口不匹配错误,

Synplify Pro/Premier GUI:Analysis->Timing Analyst 并选择 Generate Asynchronous Clock Report 选项。

那 么 我 们 就 能 用 以 下 TCL 命 令 找 回 RTL 模 块 的 原 始 名 称

采用 TCL 命令: set_option -reporting_async_clock

“sub”:

正确的方法是确保您充分且全面地对设计进行约束,而且

get_prop -prop orig_inst_of {v:sub_3s} 返回值为 “sub”。

projectName_async_clk.rpt.csv:

2012 年冬季刊

不会过度约束(过度会导致运行时间延长,生成关键路径错误 报告)。确保您已完全指定多周期和错误路径,并且已为得到

赛灵思中国通讯 46 期       55


出色的工具

parent

clk

II_0(parent) is_verilog = 1 is_error_blackbox = 1 syn_noprune = 1

sub_7_error1 COMPILATION FAILED clk dummy din[7:0] out[7:0]

uut1 din1[7:0]

[7:0]

[7:0] [7:0]

[7:0] [7:0]

din1[7:0]

uut1(sub_7_error1) w=7 is_verilog = 1 is_error_blackbox = 1 syn_noprune = 1

[7:0]

II_0 图 3 - HDL Analyst RTL 视图突出显示了包含错误的模块以及有接口错误的实例父模块,如图所示。

的时钟设置了约束(set_multicycle_path, set_false_path)。

用属性 is_error_blackbox=1 标记故障模块和带接口错误的实 例父模块,如图 3 所示。

缩短调试时间 实施潜在的 RTL 或约束故障解决方案可能需要好几个小 时才能看出结果。我们来看看如何利用分级“分治法”设计方 法和“错误继续”功能在单次综合迭代中发现多个错误,从而 减少迭代次数。 为缩短运行时间,模块化流程必不可少。这种流程支持设 计保存,能锁定已经证明有效的设计部分。支持模块化流程的 工具能帮助您在进行综合前创建 RTL 分区,也就是编译点。 一些软件还能帮助设计人员将有故障的设计部分变成黑盒子, 彻底将该部分导出并作为独立的设计子项目进行再加工。一旦

用 TCL 找到所有“故障实例”: c_list [find -hier -inst * -filter @is_error_blackbox==1] 用 TCL 列出所有“故障模块”: get_prop -prop inst_of [find -hier -inst * -filter @is_error_blackbox==1] 要查看将被关入黑盒子或导出的故障模块,请查找 HDL Analyst RTL 视图中的红色块(图 3)。

解决问题,子项目还能够以网表形式通过自下而上的流程或用 作为 RTL 通过自上而下的流程整合回原设计,甚至还能综合 利用自上而下和自下而上两种流程。

通过导出模块隔离问题 您可将故障模块作为完全独立的综合项目导出,以便专门 对该模块进行调试。导出过程会产生隔离的综合项目,其中包

要集成和调试大型设计,应尽早在设计进程中发现错误的 说明。举例来说,“错误继续”功能可提供涉及每个综合通过 信息的组合错误报告。“错误继续”能容许非致命的非语法 HDL 编译问题和某些映射错误,因此设计人员可在每次综合 迭代中分析并完成尽可能多的设计内容。为了在带有 Synplify

含所有该模块的源文件、语言标准和编译库,以及所含文件的 目录路径和路径顺序,以达到对该模块进行单独综合与调试的 目的。如前一节所示,出现错误的模块会自动在设计数据库中 标出错误属性,并在设计原理图中突出显示,便于对该模块进 行查找和提取。

Pro/Premier GUI 的 Synplify Premier 软件中调用“错误继续” 功能,应启用项目视图左侧的 Continue-on-Error 选项。 在 TCL 中:set_option –continue_on_error 1

56

为了导出模块及其所有相关源文件进行隔离调试,应首先 在 Synplify Pro/Premier 软件 GUI 中(图 4)的设计分级视图 或 RTL 视图中选择设计模块或实例,然后点击右键并在弹出

赛灵思中国通讯 46 期

2012 年冬季刊


出色的工具 菜单中选择“Generate Dependent File List”。 将每个分级模块的错误进行修复后,您可将其再集成到设 计中,既可作为 RTL 在整个设计环境中重新综合(自上而下 的综合流程),也可作为网表(自下而上的流程)进行综合(见 图 5)。 要满足时序要求就不可避免地要用到设计分级,这可能会 带来挑战。层级界限可能会限制性能,除非为设计的每个层级 分区建立时序预算。使用 RTL 分区(也称为手动锁定编译点) 时,一些工具能自动设置时序预算。Synplify Pro/Premier 软 件还能提供自动编译点,能创建自动分区,比方说通过多处理 加速运行速度。预算功能为每个 RTL 分区建立接口逻辑模型 (ILM),这样软件就能知道如何满足每个分区的时序目标。 这样,您可为每个编译点指定一个约束文件,从而覆盖手动锁 定编译点自动时序预算。 Synopsy 近期进行的全球用户调查发现,59% 的设计人 员认为“设计规范的正确性”是最重要的设计挑战之一。这个 挑战会造成设计延期,最坏情况下可能导致设计失败。设计工 具必须能尽早捕捉到错误,并就设计工作提供更高的可视化, 确保设计规范得到有效验证和修复。这些工具还必须就提出的 设计修复方案提供反馈途径。 图 4 - 将设计中的问题模块作为单独的综合项目导出 以便进行再处理,从而达到隔离问题的目的。

图 5 - 当模块问题解决后,您可以使用自上而下(RTL)或自下而上(网表级)的方式将它们重新集成到设计中

2012 年冬季刊

赛灵思中国通讯 46 期       57


实例

应用指南 如果您希望进一步了解我们的 FPGA 如何适用于众多应用,建议您阅读以下应用指南。

XAPP741:使用 AXI 互联在 7 系列 FPGA 中设计高性

XC7K325TFFG900-1(修订版 C 或 D)。

能视频系统 http://www.xilinx.com/cn/support/documentation/ application_notes/xapp741-high-performance-videoAXIinterconnect.pdf

XAPP742:AXI VDMA 参考设计 http://www.xilinx.com/cn/support/documentation/ application_notes/xapp742-axi-vdma-reference-design.pdf

本应用指南介绍了采用 LOGICORE IP 高级可扩展接口 (AXI)互联内核的性能特性设计视频系统时的考虑事项。设

本文作者 SATEESH REDDY JONNALAGADA 和 VAMSI

计重点是用 AXI 互联内核实现约 80% 的 DDR 存储器带宽,

KRISHNA 详细介绍了如何通过利用赛灵思本地视频 IP 核创

同时对部分设计进行最高频率(FMAX)优化和面积优化,实

建视频系统,以便在 KINTEX-7FPGA 中处理可编程帧率和分

现高系统吞吐量。

辨率。适用于此类应用的内核包括 AXI 视频直接存储器存取

8 个 AXI 视频直接存储器存取(VDMA)引擎同步移动 16 个流(其中 8 个用于发送视频流,另外 8 个用于接收视频流)。

(VDMA)、视频时序控制器(VTC)、测试图形生成器(TPG) 和 DDR3 存储控制器。

每个流的格式为 1,920×1,080 像素,刷新率为 60 或 75HZ,

参考设计侧重于在运行中配置用于提供视频像素时钟的板

每像素数据深度高达 32 位。每个 VDMA 均由视频测试图形生

载时钟发生器,以及用于运行所选的视频分辨率和帧率组合(系

成器(TPGA)驱动,用视频时序控制器(VTC)模块设置必

统设计人员使用的常见指标)的视频 IP 模块。设计可显示每

要的视频时序信号。每一个 AXI VDMA 读取的数据被发送至

一种帧率和分辨率组合的系统级带宽利用率和视频时延。作者

屏幕视控系统(OSD)内核,由该内核多路复用或叠加多条

详细探讨了每一种视频 IP 模块的配置,帮助设计人员有效地

视频流为单个输出视频流。OSD 内核的输出通过色域转换器

将此类 IP 用于处理各类视频功能。本参考设计主要针对赛灵

驱动板载 HDMI 视频显示接口。

思 KC705 评估板上的 KINTEX-7 FPGA XC7K325TFFG900-1

作 者 SATEESH REDDY JONNALAGADA 和 VAMSI

(修订版 C)。

KRISHNA 将性能显示器模块添加到他们的设计中,用于采集 DDR 性能指标。DDR 流量流经 AXI 互联,用于在 8 条 VDMA

流水线上移动 16 个视频流。所有 16 个视频流经共享 DDR3

XAPP552:基于可参数化的坐标旋转算法浮点库运算

SDRAM 缓存,并由 MICROBLAZETM 处理器控制。本基准

http://www.xilinx.com/cn/support/documentation/

系统主要针对赛灵思 KC705 评估板上的 KINTEX ™ -7 FPGA

application_notes/xapp552-cordic-floating-point-

58

赛灵思中国通讯 46 期

2012 年冬季刊


operations.pdf

提供了一个 ISP 参考设计,用于演示在 VIRTEX-6 PCIE 系统 中对在系统 BPI PROM 编程的方法及考虑事项。

该应用指南介绍一种使用赛灵思 SYSTEM GENERATOR FOR DSP 工具,为基于坐标旋转算法(CORDIC)的三角函数、 幂和对数运算创建可参数化浮点库运算的方法。该设计采用定

XAPP583:使用微处理器通过从串行模式或从

点 CORDIC LOGICORE IP 5.0 版模块,结合加法器、乘法器、

SELECTMAP 模式配置 7 系列 FPGA

比 较 器、ROM 和 FIFO 等 浮 点 构 建 块, 创 建 一 组 浮 点

http://www.xilinx.com/cn/support/documentation/

CORDIC 函数,用作应用中的构建块。这些函数是图像处理、

application_notes/xapp583-fpga-configuration.pdf

操纵器运动、雷达信号处理、机器人和优化工艺等各种工程应 用不可或缺的。这类工程应用需要高效地完成大量三角函数或 幂运算。

许多嵌入式系统设计人员都在寻求减少组件数量,提升灵 活性。为实现这两个目标,他们可使用系统内的微处理器配置

者 NIKHIL DHUME 和 RAMAKRISHNAN

FPGA。本应用指南以赛灵思 7 系列 FPGA 为例,详细探讨了

SRINIVASAKANNAN 通过将范围扩展算法用于底层定点模块,

配置方法。作者 MATT NIELSON 在文中引入 C 代码,阐述了

使用 SYSTEM GENERATOR FOR DSP 13.4 版本,为计算

使用从串行 (SLAVE SERIAL) 模式或从 SELECTMAP(SLAVE

三角函数、幂和对数运算设计出一种浮点库。该库支持 IEEE-

SELECTMAP) 模 式 的 实 例 应 用。 该 实 例 使 用

754 浮点标准设定的单精度和双精度输入。根据作者的演示, 性能与底层的定点模块类似。

MICROBLAZE 处理器来配置 KINTEX-7 XC7K325T 器件。 该应用指南提供配置背景和两套完整的参考设计。虽然微 处理器 C 代码针对的是赛灵思 MICROBLAZE 处理器,但编 写的时候考虑了可移植性。将 C 代码移植到另一个处理器上

XAPP518:使用 PCI EXPRESS 技术实现 VIRTEX-6

需要一些功夫,不过所有的设计文档都已经广泛地记录。

FPGA 的 BPI PROM 在系统编程 http://www.xilinx.com/cn/support/documentation/ application_notes/xapp518-isp-bpi-prom-virtex-6-pcie.

XAPP587:用 7 系列 FPGA 完成 BPI 快速配置和

pdf

IMAPCT 闪存编程 http://www.xilinx.com/cn/support/documentation/ 许多系统使用字节宽度外设接口(BPI)闪存存储器进行

application_notes/xapp587-bpi-fast-configuration.pdf

FPGA 配置和系统数据存储。在系统部署后,一般不需要或不 可能直接更新闪存 PROM。解决这个问题的方法之一就是使

7 系列 FPGA 字节宽度外设接口(BPI)配置模式,结合

用 FPGA 为与之连接的 PROM 编程。这种方法也称为在系统

同 步 读 取 和 外 部 主 配 置 时 钟(EMCCLK) 选 项, 可 从 直 接

编程(ISP)。ISP 的实例之一即 IMPACT 支持的间接编程功能。

FPGA 接口以最短的时间完成配置。作者 STEPHANIE TAPP

IMPACT 采 用 批 处 理 和 GUI 操 作 方 式。 此 时 IMPACT 使 用

在本应用指南中将这种组合称为“BPI 快速配置”。应用指南

JTAG 接口端口作为主机和 FPGA 之间的通信信道。IMPACT

介绍通过 7 系列 FPGA 间接对并行 NOR FLASH 编程的硬件

工具将位(BIT)文件发送给 FPGA,反过来 FPGA 随即对与

设置、文件生成和工具流。“BPI 快速配置”可对大容量非易

之相连的 PROM 编程。

失性存储器编程,且配置时间不到传统 BPI 配置(采用异步读

但是,许多嵌入式系统没有 JTAG 接口连接。FPGA 往往

取 ) 时 间 的 八 成。 该 应 用 指 南 使 用 VC707 评 估 板 上 的

是 PCI EXPRESS 总线上的一个端点。因为通过标准 PCIE 外

VIRTEX-7 FPGA 和 28F00AG18F 并行 NOR FLASH 演示了

设不能提供 JTAG 接口通道,在端点上对 PROM 编程的唯一

使用 ISE 设计套件 14.1 版本的设计流程。

方法就是跨 PCIE 系统编程。SIMON TAN 撰写的本应用指南

2012 年冬季刊

赛灵思中国通讯 46 期       59


号外 ,号 外

Vivado 2012.3 版本的 最新消息 Vivado ™ 设计套件 2012.3 现已向目前所有有效期内的 赛灵思 ISE® 设计套件用户免费提供。Vivado 设计套件 提供了高度集成的设计环境和全新一代系统到 IC 工具, 其中包括高层次综合、解析布局布线以及高级时序引擎 等。这些工具能够帮助开发人员提高设计集成度以及实 现速度。

最新器件支持 以下量产的器件可全面支持 Vivado 设 计 套 件 2012.3 和 ISE 设 计 套 件 14.3: • Kintex-7 70T、410T、480T、 420T、355T、325T(低压)、 160T(低压) • Virtex-7 X485T(低压) 以下一般工程样片(ES)阶段的器 件 可 支 持 Vivado 设 计 套 件 2012.3 和 ISE 设计套件 14.3:

VIVADO 设计套件 2012.3  全新多线程布局布线技术进一步提升

端点的双网络接口卡(NIC)、多

了多核工作站的设计生产力,能将基

通 道 数 据 包 DMA、 用 于 缓 冲 的

于双核处理器的运行时间缩短 1.3 倍,

DDR3 存 储 器、10G 以 太 网 MAC

基于四核处理器的运行时间缩短 1.6

和符合 10GBASE-R 标准的物理层

倍。

接口。 了 Kintex ™ -7 和

• Kintex-7 FPGA 嵌入式目标参考设

Virtex®-7 FPGA 系列倍受青睐的目标

计提供了完整的处理器子系统,并

参考设计(TRD)产品组合,可进一

配 套 提 供 千 兆 以 太 网(GbE)、

步提高设计人员生产力。

DDR3 存储控制器、显示控制器及

 Vivado 扩

• Kintex-7 FPGA 基础目标参考设计

其它标准处理器外设。

通过全面集成的 PCIe® 设计展示了

• Kintex-7 FPGA DSP 目标参考设计

Kintex-7 FPGA 的功能,该设计采

包含高速模拟接口,提供数字上 /

用 性 能 优 化 的 DMA 引 擎 和 DDR3

下变频超频功能,可运行在 491.52

存储控制器,可提供 10 Gbps 的端

MHz 的频率上。

到端性能。

• Virtex-7 X690T

• 您可在以下网址找到 Vivado 设计套

• Kintex-7 FPGA 连接功能目标参考

件支持的所有目标参考设计列表:

设 计 每 个 方 向 的 性 能 高 达 20

h t t p : / / w w w. x i l i n x . c o m / c n / i s e /

Gbps,其采用带有 Gen2 x8 PCIe

design_tools/support.htm 。

60

以下一般工程样片阶段的器件可支 持 Vivado 设计套件 2012.3: • Virtex-7 X1140T、2000T • Artix ™ -7 100T、200T 以下器件将进入初步 ES 阶段,支 持 Vivado 设计套件 2012.3: • Virtex-7 H580T 有关更多 Vivado 2012.3 版本信息, 敬请访问:http://www.xilinx.com/cn/

support/documentation/sw_manuals/ xilinx2012_2/ug910-vivado-gettingstarted.pdf 。

VIVADO 设计套件是什么? 它是提升设计人员生产力的工具。这 款全新的工具套件旨在提高设计、集成

赛灵思中国通讯 46 期

2012 年冬季刊


和实现赛灵思 28nm All Programmable

套件能继续为广大开发人员提供创新,

新的 Vivado 设计版本。而 ISE 设计套

系列器件的整体生产效率。采用 28nm

并进一步对 7 系列和赛 灵 思 Zynq ™ -

件 DSP 版本和系统版本的用户则可获

工艺制造的赛灵思器件更大,并提供了

7000 All Programmable SoC 项目的常

得新的 Vivado 系统版本。Vivado 尚未

堆叠硅片互联、高速 I/O 接口(运行速

用设计流程进行扩展。ISE 14.3 能带来

针对 WebPACK ™ 用户推出。目前计划

度高达 28 Gbps)、更强大的微处理器

最新的创新以及器件支持,现可立即下

于今年晚些时候推出 Vivado WebPACK。

和外设以及模拟 / 混合信号等多种新技

载。

关于赛灵思新一代 All Programmable

术。但这种更大型更复杂的器件也给

赛 灵思 的新 一 代设 计环 境 Vivado

开发人员带来多重设计挑战,有可能

设 计 套 件 2012.3 支 持 包 括 Virtex-7、

妨碍其向市场推出产品,不利于生产

Kintex-7 和 Artix-7 FPGA 在内的 7 系列

力的提高。 Vivado 设计套件可完全替代现有 的赛灵思 ISE 设计套件工具,能取代 ISE 设计套件的所有工具。ISE 的所有

Vivado 设计套件可完全

赛灵思建议在 Kintex K410 或更大 地的应用工程师,以确定 Vivado 是否 适 用 于 该 设 计。 如 果 当 前 项 目 正 采 用

替代现有的赛灵思 ISE

ISE 设计套件进行设计,赛灵思建议不 要转换工具,因为两种环境中的设计约

设计套件工具。ISE 工

的可扩展数据模型。有了 Vivado 设计 套件,开发人员就可以利用布局布线

xilinx.com/cn/design-tools 。

型器件上启动“新”设计的客户垂询当

功能现已直接集成到 Vivado 集成开发 环境(IDE)中,从而可充分利用共享

器件设计工具的更多信息,请见:www.

具的所有功能都直接

束和脚本并不兼容。 更多信息请参阅 ISE 14.3 和 Vivado 2012.3 版本说明。

功能同时针对时序、阻塞、走线总长度、 利用率和功耗等多种设计指标进行分

集成到 Vivado IDE 中。

析优化,并通过高级综合和实现来加 速设计创建。由于建立在 Vivado 的共 享量化数据模型基础上,因此整个设计

器件,具有增强的工具性能,特别适用

流程可以在存储器中执行且无需编写或

于大型设计或密集型设计。

VIVADO 的注册码条款是什 么? 2012 年内可免费使用 Vivado 设计

转换任何中间文件格式,从而有助于加

套件。可在赛灵思下载中心一次性下载

快运行、调试和实现速度,同时能够降

ISE 设计套件 14.3 和 Vivado 2012.3。

低对存储器的要求。 Vivado 为用户提供了预测指标,可

是否提供 VIVADO 设计套件 培训?

目前所有在有效期内的 ISE 设计套件用 户都有权获得 Vivado 设计套件。 如果用户在 2012 年 2 月 2 日以后

让用户在设计流程早期阶段进行设计和

全新的 Vivado 充分利用强大的互动

工具设置修改,从而减少修改对整体进

Tcl 脚 本、Synopsys 设 计 约 束、

生成的 ISE 设计套件 13 或 14 版本许可

度的影响。这种功能减少了设计迭代,

SystemVerilog 等业界标准。为帮助您缩

证, 那 么 当 前 的 许 可 证 也 适 用 于

并 提 高 了 生 产 力。 用 户 既 可 以 借 助

短学习时间,赛灵思推出了 10 种最新

Vivado IDE 的 Flow Navigator 功能通过

的教师指导培训课程,向您介绍如何使

成许可证的日期早于 2 月 2 日,那么就

简单的按钮方式管理整个设计流程,也

用 Vivado 工具。我们也鼓励您观看以

需要重新生成注册码方可使用 Vivado

可以使用 Tcl 脚本进行手动控制。

下网址提供的 Vivado 快速入门视频:

套件。

www.xilinx.com/cn/training/Vivado 。

Vivado。如果用户仍在有效期内,但生

注册码生成信息,敬请访问:www.

xilinx.com/cn/getlicense 。

我是应该继续使用 ISE 设计套 件还是转用 VIVADO ?

VIVADO 设计套件否有不同版 本?

ISE 设 计 套 件 是 一 款 业 经 验 证 的

Vivado 设计套件提供两种版本:设计版

解 决 方 案, 适 用 于 各 代 赛 灵 思 All

本和系统版本。有效期内的 ISE 设计套

Programmable 器件。赛灵思 ISE 设计

件逻辑版本和嵌入式版本的用户可获得

2012 年冬季刊

赛灵思中国通讯 46 期       61


领 先 一 代 赛灵思在28nm节点实现的多种技术突破为客户带来了重大超前价值,拥有领先 一代的竞争优势。 产品组合:All Programmable FPGA, SoC和3D IC,现已供货。 产品:性能、功耗与集成度上的重大突破。 生产力:无与伦比的集成与实现速度。

www.xilinx.com.cn


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.