Intel FPGA/CPLD设计(基础篇)(txt+pdf+epub+mobi电子书下载)

作者:王欣,王江宏,蔡海宁,王诚,吴继华

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Intel FPGA/CPLD设计(基础篇)

Intel FPGA/CPLD设计(基础篇)试读:

内容提要

本书结合作者多年工作经验,系统地介绍了FPGA/CPLD的基本设计方法。在介绍FPGA/CPLD概念的基础上,介绍了Intel主流FPGA/CPLD的结构与特点,并通过丰富的实例讲解Quartus Ⅱ与Model Sim、Synplify Pro等常用EDA工具的开发流程。

本书所有实例的完整工程、源代码和使用说明文件,都以云存储的方式存放在云端,读者可以通过扫描二维码的方式进行下载。

本书可作为高等院校通信工程、电子工程、计算机、微电子与半导体等专业的教材,也可作为硬件工程师和IC工程师的实用工具书序

Altera 公司成立于 1983 年,后于 2016 年成为 Intel 公司可编程解决方案事业部(Programmable Solutions Group),总部位于美国硅谷,自从1984年发明世界上第一款可编程逻辑器件以来,一直为客户提供业界领先的定制逻辑解决方案。今天,分布在全球20多个地区的3000多名员工将为12000多家用户提供更巧妙的定制逻辑解决方案及广泛的技术支持,包括了FPGA、SoC、CPLD及电源管理产品等。

Intel的全系列定制逻辑解决方案解决了很多系统级难题,包括性能、功耗、总体拥有成本、电路板面积、产品及时面市和设计团队效能等。很多不同行业的业界领先公司都采用了Intel FPGA产品,包括数据中心、通信、汽车、广播、工业、医疗、军事、测试和测量、消费类等行业。

Intel公司可编程解决方案事业部的产品包括:

• Stratix系列FPGA和SoC(支持实现性能最好的系统,用于数据处理和算法加速);

• Arria系列FPGA和SoC(以很低的功耗预算实现了高性能系统);

• Cyclone系列FPGA和SoC(以最低功耗实现了需要较高性能的大批量应用系统);

• MAX系列FPGA和CPLD(在大批量系统中实现了非易失、单芯片集成);

• Enpirion电源产品(为Intel FPGA、SoC和CPLD提供支持,在集成产品中同时实现了高效、小外形封装、低噪声性能);

• 软件开发工具、IP、参考设计和开发套件(方便了Intel FPGA、SoC和CPLD的开发,保证了极高的设计团队效能)。

随着最终市场需求的发展,用户产品越来越复杂,我们的定制逻辑容量也随之快速增长。结果,设计工程师没有足够的设计方法和知识来满足需求的增长。设计人员在采用最新定制逻辑解决方案及Intel FPGA前沿产品和技术时,可以充分利用我们在中国本地开发的参考材料和指南。

我非常荣幸地向您推荐《Intel FPGA/CPLD设计(基础篇)》和《Intel FPGA/CPLD设计(高级篇)》。与前面版本图书相比,本版对内容进行了更新以反映Intel最新FPGA器件和设计工具。这两本书不仅介绍了传统PLD技术和设计技巧,而且还大量阐述了目前业界流行的硬浮点DSP、片外高速存储器、HMC(Hybrid Memory Controller)、JESD204B和片上系统FPGA,以及Intel推出的适用于异构平台并通过FPGA做加速处理的Open CL软件开发套件。

这两本书以独特的视角解释了设计方法,帮助您掌握高级PLD设计技巧,还介绍了Intel FPGA器件和Quartus Ⅱ设计软件。这些书有丰富的设计实例,通过实际练习,能帮助您深入理解概念,养成良好的设计习惯。

希望您能够从这些优秀的书中受益,预祝您的可编程逻辑设计获得成功!庄秉翰副总裁亚太区可编程解决方案事业部Intel公司

关于本书

内容和特点

FPGA/CPLD、GPU和CPU被称为未来数字电路系统的3块基石,也是目前硬件设计研究的热点。与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发过程投资小、周期短,可反复编程修改,保密性能好,开发工具智能化等特点,特别是随着电子工艺的不断改进,低成本FPGA/CPLD器件推陈出新,这一切促使FPGA/CPLD成为当今硬件设计的首选方式之一。可以说FPGA/CPLD设计技术是当今高级硬件工程师与IC工程师的必备技能。

我国可编程逻辑器件设计技术落后于国外,目前立足工程实践,系统地介绍最新FPGA/CPLD设计工具的中文书籍较为缺乏。在这种情况下,为了满足广大工科在校生了解业界流行的高效FPGA/CPLD设计技术的需要,提高硬件工程师与IC工程师的工程实践技巧,我们编写了《Altera FPGA/CPLD设计(基础篇)》和《Altera FPGA/CPLD设计(高级篇)》。这两本书出版以来,广受读者好评,但随着技术的不断发展,器件型号和软件版本的不断更新,原有图书的内容和知识体系已经不适应目前的读者需求,为此我们根据Intel(注:原Altera已于2016年被Intel收购)推出的一系列新型FPGA,以及新版Quartus Ⅱ软件的特性,对上述两本书进行了改版升级。

新版的《Intel FPGA/CPLD设计(基础篇)》(以下简称“本书”)涵盖了所有Intel主流FPGA/CPLD硬件结构与特点,详尽地讨论了Quartus Ⅱ与第三方EDA工具的设计方法,系统地阐述了Intel可编程逻辑设计优化技术。

本书共7章,各章内容简要介绍如下。

• 第1章:在介绍可编程逻辑设计技术基本概念的基础上讨论了FPGA/CPLD的基本结构、设计流程和开发工具,并展望了下一代可编程逻辑设计技术。

• 第2章:介绍了Intel高密度、低成本FPGA与CPLD等主流器件的结构特点。

• 第3章:重点介绍了Quartus Ⅱ的软件设计流程,并且结合了具体的滤波器设计案例,同时使用前面所学到的工具,详细介绍了优化、分析、查看、验证设计方法。

• 第4章:介绍了Intel FPGA IP设计工具与使用方法。

• 第5章:介绍了 I/O分配验证工具、功率估计和分析工具、RTL阅读器、Signal Probe(信号探针)、Signal Tap Ⅱ逻辑分析器、Chip Editor(底层编辑器)、Timing Closure Floorplan(时序收敛平面布局规划器)和ECO(工程更改管理)等工具的使用方法。

• 第6章:介绍了Intel FPGA/CPLD的常用编程与配置方法。

• 第7章:在综述第三方综合工具的基础上,重点介绍了Model Sim仿真工具与Synplify/Synplify Pro综合工具的使用方法。

本书的主要特点如下。

• 全面系统:涵盖了Intel FPGA软、硬件设计技术,基础与高级设计工具,全面系统地论述了Intel可编程设计技术。

• 实用价值高:本书的作者都有丰富的FPGA/CPLD、数字ASIC设计经验,本书立足于工程实践的需要,对工程设计有显著的指导意义。

• 内容新颖:本书的作者长期工作在可编程逻辑设计的最前沿,与FPGA器件制造公司和EDA软件设计公司联系紧密,所以有幸能够在第一时间内使用最新版本的FPGA/CPLD设计工具。书中涉及的所有工具均根据较新资料撰写,使图书介绍的内容新颖。

• 剖析深刻:书中对FPGA/CPLD设计的基本原理、方法有较为详尽的论述,对各种设计工具的介绍并不局限于操作方法,而是结合作者多年的工作经验与心得,从较深的层面对各个工具的特点进行剖析。

读者对象

本书可作为高等院校通信工程、电子工程、计算机、微电子与半导体学等理工专业的教材,也可作为硬件工程师和IC工程师的实用工具书。

配套资源

配套资源中提供了书中所有示例的完整工程文件、设计源文件和说明文件(读者可扫描封面上的二维码进行下载)。

每个工程示例都包括了该工程的项目文件、源文件、报告文件和生成结果等文件,读者可以用Quartus Ⅱ或相应的软件直接打开。设计源文件根据设计输入类型分为源代码或原理图等。请读者将设计源文件复制到计算机硬盘上,并按照书中的操作步骤自行操作练习。示例说明文件包含了示例的详细信息和操作指南。

本书约定

为了方便读者阅读,书中设计了4个小图标,它们代表的含义如下。行家指点:用于介绍使用经验和心得,或罗列重要的概念。注意事项:用于提醒读者应该注意的问题。多学一招:用于介绍实现同一功能的不同方法。操作实例:用于引出一个操作题目和相应的一组操作步骤。

全书的各章节分别由王欣、王江宏、蔡海宁、王诚和吴继华等作者执笔,由Intel 公司可编程解决方案事业部(Programmable Solutions Group)资深现场应用工程师王江宏和资深应用工程师王欣统筹定稿。

Intel公司亚太区可编程解决方案事业部现场应用工程总监邓海涛先生、亚太区应用工程总监罗小锋先生、中国区大客户销售总监吕家龙先生、现场应用工程经理赵敏先生对本书提出了许多建设性意见,并给予作者多方面的帮助。在这里要特别感谢Intel公司亚太区可编程解决方案事业部副总裁庄秉翰先生在百忙之中亲自为本书撰写序言。感谢所有关心并支持本书的同仁佳友!

感谢您选择了本书,如果您对书中内容有任何困惑和建议,请与我们联系。

电子邮件:adeli.wang@intel.com(作者),liyongtao@ptpress.com.cn(责任编辑)。

如果您需要得到Intel更全面的服务与技术支持,请访问http://www.altera.com.cn。2017年5月第1章FPGA/CPLD简介

本章内容侧重于一般性可编程设计理论,综合讨论目前的主流器件和EDA开发工具。本章在引入FPGA/CPLD基本概念的基础上,重点论述了FPGA/CPLD的完整设计流程,简要介绍了FPGA/CPLD的常用开发工具,最后展望了FPGA/CPLD设计技术的新发展。

本章主要内容如下。

• 可编程逻辑设计技术简介。

• FPGA/CPLD的基本结构。

• FPGA/CPLD的设计流程。

• FPGA/CPLD的常用开发工具。

• 下一代可编程逻辑设计技术展望。1.1 可编程逻辑设计技术简介

本节在讨论可编程逻辑器件发展简史的基础上简述目前常用的可编程逻辑器件的分类。1.1.1 可编程逻辑器件发展简史

随着微电子设计技术与工艺的发展,数字集成电路从电子管、晶体管、中小规模集成电路、超大规模集成电路(VLSIC)逐步发展到今天的专用集成电路(ASIC)。ASIC的出现降低了产品的生产成本,提高了系统的可靠性,缩小了设计的物理尺寸,推动了社会的数字化进程。但是,ASIC设计周期长、改版投资大、灵活性差等缺陷,制约了ASIC的应用范围。硬件工程师希望有一种更灵活的设计方法,可根据需要在实验室就能设计、更改大规模数字逻辑,研制自己的ASIC并马上投入使用,这是提出可编程逻辑器件的基本思想。

可编程逻辑器件随着微电子制造工艺的发展取得了长足的进步。从早期的只能存储少量数据,完成简单逻辑功能的可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存2储器(EPROM),发展到能完成中大规模的数字逻辑功能的可编程阵列逻辑(PAL)和通用阵列逻辑(GAL),今天已经发展成为可以完成超大规模的复杂组合逻辑与时序逻辑的复杂可编程逻辑器件(CPLD)和现场可编程逻辑器件(FPGA)。随着工艺技术的发展与市场需要,超大规模、高速、低功耗的新型FPGA/CPLD不断推陈出新。新一代的FPGA甚至集成了中央处理器(CPU)或数字处理器(DSP)内核,在一片 FPGA 上进行软硬件协同设计,为实现片上可编程系统(System On Programmable Chip,SOPC)提供了强大的硬件支持。1.1.2 可编程逻辑器件分类

广义上讲,可编程逻辑器件是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。目前常用的可编程逻辑器件主要有简单的逻辑阵列(PAL/GAL)、复杂可编程逻辑器件(CPLD)和现场可编程逻辑阵列(FPGA)等3大类。

PAL/GAL。PAL是Programmable Array Logic的缩写,即可编程阵列逻辑;GAL是Generic Array Logic的缩写,即通用可编程阵列逻辑。PAL/GAL是早期可编程逻辑器件的发展形式,其特点是大多基于2ECMOS工艺,结构较为简单,可编程逻辑单元多为与阵列和或阵列,可编程单元密度较低,仅能适用于某些简单的数字逻辑电路。虽然PAL/GAL密度较低,但是它们一出现即以其低功耗、低成本、高可靠性、软件可编程、可重复更改等特点引发了数字电路领域的巨大振动。虽然目前较复杂的逻辑电路一般使用CPLD甚至FPGA完成,但是对于很多简单的数字逻辑,GAL等简单的可编程逻辑器件仍然被大量使用。目前,国内外很多对成本十分敏感的设计都在使用GAL等低成本可编程逻辑器件,越来越多的74系列逻辑电路被GAL取代。GAL等器件发展至今已经20多年,新一代的GAL以功能灵活、小封装、低成本、重复可编程、应用灵活等优点仍然在数字电路领域扮演着重要的角色。目前,比较大的GAL器件供应商主要是Lattice半导体。

(1) CPLD。

CPLD是Complex Programmable Logic Device的缩写,即复杂的可编程逻辑器件。Altera为了突出特性,曾将自己的CPLD器件称为EPLD(Enhanced Programmable Logic Device),即增强型可编程逻辑器件。其实EPLD和CPLD属于同等性质的逻辑器件,目前Altera为了遵循称呼习惯,已经将其EPLD统称为CPLD。CPLD是在PAL、2GAL的基础上发展起来的,一般采用ECMOS工艺,也有少数厂商采用Flash工艺,其基本结构由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块构成。CPLD可实现的逻辑功能比PAL和GAL有了大幅度提升,一般可以完成设计中较复杂、较高速度的逻辑功能,如接口转换、总线控制等。CPLD的主要器件供应商有Altera、Lattice和Xilinx等。

(2) FPGA。

FPGA是Filed Programmable Gate Array的缩写,即现场可编程逻辑阵列。FPGA是在CPLD的基础上发展起来的新型高性能可编程逻辑器件,一般采用SRAM工艺,也有一些专用器件采用Flash工艺或反熔丝(Anti-Fuse)工艺等。FPGA的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。FPGA的基本组成部分有可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。FPGA的主要器件供应商有Xilinx、Altera、Lattice、Actel和Atmel等。1.2 FPGA带来的优势

从可编程逻辑器件诞生的初始阶段,一直被当作芯片验证器件来使用。因为它不能达到很快的速度,同时逻辑的规模也有限,价格又昂贵,所以很少被使用到最终的产品中。导致产能有限,需求量也并不大,和ASIC无法相提并论。但是从本世纪开始,情况慢慢发生了变化。首先是FPGA的工艺提升,使得器件能支持比较快速的性能,同时逻辑规模也大规模提升。业界慢慢发现FPGA也可以使用在最终产品当中并且具备以下一些独特的优势。

• 价格优势。这似乎和FPGA相对昂贵的价格有一些矛盾,但确实是事实。一颗ASIC芯片,只有在大规模使用的情况下才能获取利润,否则无法覆盖前期付出的流片的成本。而FPGA的单价确实比较贵一些,但是不需要厂家付出流片的成本,而且可以保证100%的成品率。因而对很多供货规模并不庞大的ASIC而言,具有价格优势,可以帮助厂家降低成本。

• 时间优势。时间是产品占领市场的关键因素。FPGA相对ASIC具有显而易见的时间优势。一般规模的FPGA开发速度可以在半年左右,甚至可以更快,只要研发能力够强。而常规芯片限制于生产厂家的时间表,通常会需要一年到两年的时间。这对于很多急需占据市场的产品而言,无法接受。

• 更新优势。可编程逻辑器件是可以反复配置的,甚至可以远程修改配置文件。这是这种器件的独特优势,类似于CPU的软件可以升级。厂家同样可以对芯片硬件进行升级,比如一些协议还没有成熟,或者在后面的升级中需要添加协议、功能的产品中,可以得到很好的利用。甚至有些厂家为了尽早占领市场,可以先完成主要功能提供给客户,然后在后面慢慢改进,甚至可以为客户定制。

• 自主优势。在一些行业,比如视频,没有什么秘密可言,几乎所有的厂家都使用类似的芯片,而同类芯片的解决方案也几乎是一样的。为了获得市场差异化的优势,有些厂家希望能开发出一些特别的功能,同时又不希望花很大的代价来生产自己的芯片,这个时候FPGA就成为它们的选择。

因此,FPGA已经不再是简单的验证芯片,由于功能不断加强,已经成为业界各个领域里重要的解决方式之一。所以学习FPGA,并不只是为了学习数字电路之类的基础知识,来获得一些感官上的收获,更多的是成为未来工作的砝码。1.3 FPGA/CPLD的基本结构

本节在讨论FPGA与CPLD的通用结构的基础上,比较两者的异同,加深读者对这两种通用的可编程逻辑器件的认识。1.3.1 FPGA的基本结构

简化的FPGA基本由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等,如图1-1所示。图1-1 可编程逻辑器件的结构原理图

每个单元的基本概念介绍如下。

(1) 可编程输入/输出单元。

输入/输出(Input/Output)单元简称I/O单元,它们是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求。为了使FPGA有更灵活的应用,目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与I/O物理特性;可以调整匹配阻抗特性,上/下拉电阻;可以调整输出驱动电流的大小等。

可编程I/O单元支持的电气标准因工艺而异,不同器件商不同器件族的FPGA支持的I/O 标准也不同,一般说来,常见的电气标准有 LVTTL、LVCMOS、SSTL、HSTL、LVDS、LVPECL和PCI等。值得一提的是,随着ASIC工艺的飞速发展,目前可编程I/O支持的最高频率越来越高,一些高端FPGA通过DDR寄存器技术,甚至可以支持高达2Gbit/s的数据速率。

(2) 基本可编程逻辑单元。

基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT,Look Up Table)和寄存器(Register)组成的。FPGA内部查找表一般为4输入(注:Altera Stratix Ⅱ的自适应逻辑模块ALM结构比较特殊),查找表一般完成纯组合逻辑功能。FPGA内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位、时钟使能的触发器(FF,Flip Flop),也可以配置成为锁存器(Latch)。FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但是不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。例如,Altera可编程逻辑单元通常被称为LE(Logic Element,逻辑单元),由一个Register加一个LUT构成。Altera的大多数FPGA将10个LE有机地组合起来,构成更大的功能单元――逻辑阵列模块(LAB,Logic Array Block),LAB中除了LE还包含LE间的进位链、LAB控制信号、局部互联线资源、LUT级联链、寄存器级联链等连线与控制资源。Xilinx可编程逻辑单元叫Slice,它由上下两个部分构成,每个部分都由一个Register加一个LUT组成,被称为LC(Logic Cell,逻辑单元),两个LC之间有一些共用逻辑,可以完成LC之间的配合与级联。Lattice的底层逻辑单元叫PFU(Programmable Function Unit,可编程功能单元),它由8个LUT和8~9个Register构成。当然这些可编程单元的配置结构随着器件的发展也在不断更新,最新的一些可编程逻辑器件常常根据设计需求推出一些新的LUT和Register的配置比率,并优化其内部的连接构造。

学习底层配置单元的LUT和Register比率的一个重要意义在于器件选型和规模估算。很多器件手册上用器件的ASIC门数或等效的系统门数表示器件的规模,但目前FPGA内部除了基本可编程逻辑单元外,还包含有丰富的嵌入式RAM、PLL或DLL,以及专用Hard IP Core(硬知识产权功能核)等。这些功能模块也会等效出一定规模的系统门,所以用系统门权衡基本可编程逻辑单元的数量是不准确的,常常混淆设计者。比较简单科学的方法是用器件的Register或LUT的数量衡量(一般来说两者比例为1∶1)。例如,Xilinx的Spartan-Ⅲ系列的XC3S1000有15360个LUT,而Lattice的EC系列LFEC15E也有15360个LUT,所以这两款FPGA的可编程逻辑单元数量基本相当,属于同一规模的产品。同样道理,Altera的Cyclone器件族的EP1C12的LUT数量是12060个,就比前面提到的两款FPGA规模略小。需要说明的是,器件选型是一个综合性问题,需要将设计的需求、成本压力、规模、速度等级、时钟资源、I/O特性、封装、专用功能模块等诸多因素综合考虑。

(3) 嵌入式块RAM。

目前大多数FPGA都有内嵌的块RAM(Block RAM)。FPGA内部嵌入可编程RAM模块,大大地拓展了FPGA的应用范围和使用灵活性。FPGA内嵌的块RAM一般可以灵活配置为单端口RAM(SPRAM,Single Port RAM)、双端口RAM(DPRAM,Double Ports RAM)、伪双端口RAM(Pseudo DPRAM)、CAM(Content Addressable Memory)、FIFO (First In First Out)等常用存储结构。RAM的概念和功能读者应该非常熟悉,在此不再赘述。FPGA中其实并没有专用的ROM硬件资源,实现ROM的思路是对RAM赋予初值,并保持该初值。所谓CAM,即内容地址储存器。CAM这种存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。概括地讲,RAM是一种根据地址读、写数据的存储单元;而CAM和RAM恰恰相反,它返回的是与端口数据相匹配的内部地址。CAM的应用也非常广泛,比如在路由器中的地址交换表等。FIFO是“先进先出队列”式存储结构。FPGA内部实现RAM、ROM、CAM、FIFO等存储结构都可以基于嵌入式块RAM单元,并根据需求自动生成相应的粘合逻辑(Glue Logic)以完成地址和片选等控制逻辑。

不同器件商或不同器件族的内嵌块RAM的结构不同,Xilinx常见的块RAM大小是4kbit和18kbit两种结构,Lattice常用的块RAM大小是9kbit,Altera的块RAM最为灵活,一些高端器件内部同时含有两种块RAM结构,分别是M9K RAM(9kbit)和M-144K RAM (144kbit)。

需要补充一点的是,除了块RAM,Altera、Xilinx和Lattice的FPGA还可以灵活地将LUT配置成RAM、ROM、FIFO等存储结构,这种技术被称为分布式RAM(Distributed RAM)。根据设计需求,块RAM的数量和配置方式也是器件选型的一个重要标准。

(4) 丰富的布线资源。

布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA内部有着非常丰富的布线资源,这些布线资源根据工艺、长度、宽度和分布位置的不同而被划分为不同的等级,有一些是全局性的专用布线资源,用以完成器件内部的全局时钟和全局复位/置位的布线;一些叫作长线资源,用以完成器件Bank(分区)间的一些高速信号和一些第二全局时钟信号(有时也被称为Low Skew信号)的布线;还有一些叫作短线资源,用以完成基本逻辑单元之间的逻辑互联与布线;另外,在基本逻辑单元内部还有着各式各样的布线资源和专用时钟、复位等控制信号线。

实现过程中,设计者一般不需要直接选择布线资源,而是由布局布线器自动根据输入的逻辑网表的拓朴结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以设计者常常忽略布线资源。其实布线资源的优化与使用和设计的实现结果(包含速度和面积两个方面)有直接关系。

(5) 底层嵌入功能单元。

底层嵌入功能单元的概念比较笼统,这里我们指的是那些通用程度较高的嵌入式功能模块,比如PLL(Phase Locked Loop)、DLL(Delay Locked Loop)、DSP、CPU等。随着FPGA的发展,这些模块被越来越多地嵌入到FPGA的内部,以满足不同场合的需求。

目前大多数FPGA厂商都在FPGA内部集成了DLL或PLL硬件电路,用以完成时钟的高精度、低抖动的倍频、分频、占空比调整、移相等功能。目前,高端FPGA产品集成的DLL和PLL资源越来越丰富,功能越来越复杂,精度越来越高(一般在ps的数量级)。Altera芯片集成的是PLL,Xilinx芯片主要集成的是DLL,Lattice的新型FPGA同时集成了PLL与DLL以适应不同的需求。Altera芯片的PLL模块分为增强型PLL(Enhanced PLL)和快速PLL(Fast PLL)等。Xilinx芯片DLL的模块名称为CLKDLL,在高端FPGA中, CLKDLL的增强型模块为DCM(Digital Clock Manager,数字时钟管理模块)。这些时钟模块的生成和配置方法一般分为两种,一种是在HDL代码和原理图中直接实例化,另一种方法是在IP核生成器中配置相关参数,自动生成IP。Altera的IP核生成器叫作Mega Wizard,Xilinx的IP核生成器叫作Core Generator,Lattice的IP核生成器叫作Module/IP Manager。另外,可以通过在综合、实现步骤的约束文件中编写约束属性来完成时钟模块的约束。

越来越多的高端FPGA产品将包含DSP或CPU等软处理核,从而使FPGA由传统的硬件设计手段逐步过渡为系统级设计平台。例如,Altera的Stratix、Stratix GX、Stratix Ⅱ等器件族内部集成了DSP Core,配合通用逻辑资源,还可以实现ARM、MIPS、NIOS等嵌入式处理器系统;Xilinx的Virtex Ⅱ和Virtex Ⅱ Pro系列FPGA内部集成了Power PC 450的CPU Core和Micro Blaze RISC处理器Core;Lattice的ECP系列FPGA内部集成了系统DSP Core模块。这些CPU或DSP处理模块的硬件主要由一些加、乘、快速进位链、Pipelining和Mux等结构组成,加上用逻辑资源和块RAM实现的软核部分,就组成了功能强大的软运算中心。这种CPU或DSP比较适合实现FIR滤波器、编码解码、FFT(快速傅里叶变换)等运算密集型应用。FPGA内部嵌入CPU或DSP等处理器,使FPGA在一定程度上具备了实现软硬件联合系统的能力,FPGA正逐步成为SPOC(System On Programmable Chip)的高效设计平台。Altera的系统级开发工具是Qsys和DSP Builder,通过这些平台用户可以方便地设计标准的DSP处理器(如ARM、NIOS等)、专用硬件结构与软硬件协同处理模块等。Xilinx的系统级设计工具是EDK和Platform Studio,Lattice的嵌入式DSP开发工具是MATLAB的Simulink。

(6) 内嵌专用硬核。

这里的内嵌专用硬核与前面的“底层嵌入单元”是有区分的,这里讲的内嵌专用硬核通用性相对较弱,不是所有FPGA器件都包含硬核(Hard Core)。我们称FPGA和CPLD为通用逻辑器件,是区分于专用集成电路(ASIC)而言的。其实FPGA内部也有两个阵营:一方面是通用性较强,目标市场范围很广,价格适中的FPGA;另一方面是针对性较强,目标市场明确,价格较高的FPGA。前者主要指低成本(Low Cost)FPGA,后者主要指某些高端通信市场的可编程逻辑器件。例如,Altera的Stratix IV GX器件族内部集成了8.5Gbit/s SERDES(串并收发单元);Xilinx的对应器件族是Virtex 5和Virtex 6;Lattice器件的专用Hard Core的比重更大,有两类器件族支持SERDES功能,分别是Lattice高端SC系列FPGA和现场可编程系统芯片(FPSC,Field Programmable System Chip)。目前,Altera、Lattice和Xilinx都已经推出内嵌10Gbit/s SERDES模块的系统级可编程逻辑器件。1.3.2 CPLD的基本结构

CPLD在工艺和结构上与FPGA有一定的区别,如前面介绍,FPGA一般都是SRAM工艺的,如Xilinx、Altera、Lattice的系列FPGA器件,其基本结构都是基于查找表加寄存器结构的。CPLD一般都是2基于乘积项结构的,如Altera的MAX7000、MAX3000(EPROM工艺)系列器件,Lattice的isp MACH4000、isp MACH5000(0.18µm 2ECMOS工艺)系列器件,Xilinx的XC9500(0.35µm CMOS Fast Flash工艺)、Cool Runner2(0.18µm CMOS工艺)系列器件等都是基于乘积项的CPLD。

CPLD的结构相对比较简单,主要由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块构成,如图1-2所示。图1-2 CPLD的结构示意图

(1) 可编程I/O单元。

CPLD的可编程I/O单元和FPGA的可编程I/O单元的功能一致,完成不同电气特性下对输入/输出信号的驱动与匹配。由于CPLD的应用范围局限性较大,所以其可编程I/O的性能和复杂度与FPGA相比有一定的差距。CPLD的可编程I/O支持的I/O标准较少,频率也较低。

(2) 基本逻辑单元。

与FPGA相似,基本逻辑单元是CPLD的主体,通过不同的配置,CPLD的基本逻辑单元可以完成不同类型的逻辑功能。需要强调的是,CPLD的基本逻辑单元的结构与FPGA相差较大。前面介绍过,FPGA的基本逻辑单元通常是由LUT和Register按照1∶1的比例组成的,而CPLD中没有LUT这种概念,其基本逻辑单元是一种被称为宏单元(Macro Cell,简称MC)的结构。所谓宏单元,其本质是由一些与、或阵列加上触发器构成的,其中“与或”阵列完成组合逻辑功能,触发器用以完成时序逻辑。器件规模一般用MC的数目表示,器件标称中的数字一般都包含该器件的MC数量。CPLD厂商通过将若干个MC连接起来完成相对复杂一些的逻辑功能。不同厂商的这种MC集合的名称不同,Altera的MAX7000、MAX3000系列EPLD将之称为逻辑阵列模块(LAB,Logic Array Block);Lattice的LC4000、isp LSI5000、isp LSI2000系列CPLD将之称为通用逻辑模块(GLB, Generic Logic Block);Xilinx 9500 和 Cool Runner2 将之称为功能模块(FB,Function Block),其功能一致,但结构略有不同。

与CPLD基本逻辑单元相关的另外一个重要概念是乘积项。所谓乘积项即MC中与阵列的输出,其数量标志了CPLD容量,对CPLD的性能也有一定的影响,不同厂商的CPLD定制的乘积项数目不同。乘积项阵列实际上就是一个“与或”阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑,在“与”阵列后一般还有一个“或”阵列,用以完成最小逻辑表达式中的“或”关系。“与或”阵列配合工作,完成复杂的组合逻辑功能。MC中的可编程触发器与FPGA内部的可编程触发器相似,一般也包含时钟、复位/置位配置功能,用以实现时序逻辑的寄存器或锁存器等功能。

(3) 布线池和布线矩阵。

CPLD的布线及连通方式与FPGA差异较大。前面讲过,FPGA内部有不同速度、不同驱动能力的丰富布线资源,用以完成FPGA内部所有单元之间的互联互通。而CPLD的结构比较简单,其布线资源也相对有限,一般采用集中式布线池结构。所谓布线池其本质就是一个开关矩阵,通过打结点可以完成不同MC的输入与输出项之间的连接。Altera的布线池叫作可编程互联阵列(PIA,Programmable Interconnect Array),Lattice的布线池叫作全局布线池(GRP,Global Routing Pool),Xilinx 9500系列CPLD的布线池叫作高速互联与交叉矩阵(Fast Connect Ⅱ Switch Matrix),而Cool Runner Ⅱ系列CPLD的布线池则叫作先进的互联矩阵(AIM,Advanced Interconnect Matrix)。CPLD的器件内部互联资源比较缺乏,所以在某些情况下器件布线时会遇到一定的困难,Lattice的LC4000系列器件在输出I/O Bank和功能模块GLB之间还添加了一层输出布线池(ORP,Output Routing Pool),在一定程度上提高了设计的布通率。

CPLD的布线池结构固定,所以CPLD的输入管脚到输出管脚的标准延时固定,被称为Pin to Pin延时,用Tpd表示。Pin to Pin延时反应了CPLD器件可以实现的最高频率,也就清晰地标明了CPLD器件的速度等级。

(4) 其他辅助功能模块。

CPLD中还有一些其他的辅助功能模块,如JTAG(IEEE 1532、IEEE 1149.1)编程模块,一些全局时钟、全局使能、全局复位/置位单元等。1.3.3 FPGA和CPLD的比较

FPGA/CPLD既继承了ASIC的大规模、高集成度、高可靠性的优点,又克服了普通ASIC设计周期长、投资大、灵活性差的缺点,逐步成为复杂数字硬件电路设计的理想首选。当代FPGA、CPLD有以下特点。

• 规模越来越大。随着VLSI(Very Large Scale IC,超大规模集成电路)工艺的不断提高,单一芯片内部可以容纳上百万个晶体管,FPGA芯片的规模也越来越大。单片逻辑门数已愈千万,如Altera Stratix IV的EP4S230已经达到千万门的规模。芯片的规模越大所能实现的功能就越强,同时也更适于实现片上系统(SOC)。

• 开发过程投资小。FPGA/CPLD芯片在出厂之前都做过严格的测试,而且FPGA/CPLD设计灵活,发现错误时可直接更改设计,减少了投片风险,节省了许多潜在的花费。所以不但许多复杂系统使用FPGA完成,甚至设计ASIC时也要把实现FPGA功能样机作为必需的步骤。

• FPGA/CPLD一般可以反复地编程、擦除。在不改变外围电路的情况下,设计不同片内逻辑就能实现不同的电路功能。所以,用FPGA/CPLD试制功能样机,能以最快的速度占领市场。甚至在有些领域,因为相关标准协议发展太快,设计ASIC跟不上技术的更新速度,只能依靠FPGA/CPLD完成系统的研制与开发。

• FPGA/CPLD开发工具智能化,功能强大。现在,FPGA/CPLD开发工具种类繁多、智能化高、功能强大。应用各种工具可以完成从输入、综合、实现到配置芯片等一系列功能。还有很多工具可以完成对设计的仿真、优化、约束、在线调试等功能。这些工具易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。

• 新型FPGA内嵌CPU或DSP内核,支持软硬件协同设计,可以作为片上可编程系统(SOPC)的硬件平台。

• 新型FPGA内部内嵌高性能ASIC的Hard Core。通过这些Hard IP(知识产权)可以完成某些高速复杂设计(如SPI 4.2、PCI Express、Fibre-Channel等通信领域成熟标准和接口等),提高系统的工作频率与效能,减轻工程师的任务量,规避了研发风险,加速了研发进程。

FPGA与CPLD的区别及联系如表1-1所示,希望通过对照,加深读者对FPGA和CPLD各自特点的整体把握。表1-1 FPGA与CPLD的区别及联系

尽管FPGA与CPLD在硬件结构上有一定的差异,但是对用户而言,FPGA和CPLD的设计流程是相似的,使用EDA软件的设计方法也没有太大的差别。设计时,根据所选器件型号充分发挥器件的特性就可以了,所以后文多数情况下的论述并未加以区分,而统称为可编程逻辑器件。1.4 FPGA/CPLD的设计流程

一般来说,完整的FPGA/CPLD设计流程包括电路设计与输入、功能仿真、综合、综合后仿真、实现、布线后仿真与验证、板级仿真验证与调试等主要步骤,如图1-3所示。图1-3 完整的FPGA/CPLD设计流程

(1) 电路设计与输入。

电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA工具。常用的设计输入方法有硬件描述语言(HDL)和原理图设计输入方法等。原理图设计输入法在早期应用得比较广泛,它根据设计要求,选用器件、绘制原理图、完成输入过程。这种方法的优点是直观、便于理解、元器件库资源丰富。但是在大型设计中,这种方法的可维护性较差,不利于模块构造与重用;更主要的缺点是当所选用芯片升级换代后,所有的原理图都要做相应的改动。目前进行大型工程设计时,最常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL语言是VHDL和Verilog HDL。它们的共同特点是利于由顶向下设计,利于模块的划分与复用,可移植性好,通用性好,设计不因芯片的工艺与结构的不同而变化,更利于向ASIC的移植。波形输入和状态机输入方法是两种常用的辅助设计输入方法:使用波形输入法时,只要绘制出激励波形和输出波形,EDA软件就能自动地根据响应关系进行设计;使用状态机输入法时,设计者只需画出状态转移图,EDA软件就能生成相应的HDL代码或原理图,使用十分方便。但是需要指出的是,波形输入和状态机输入方法只能在某些特殊情况下缓解设计者的工作量,并不适合所有的设计。

(2) 功能仿真。

电路设计完成后,要用专用的仿真工具对设计进行功能仿真,验证电路功能是否符合设计要求。功能仿真有时也被称为前仿真。常用的仿真工具有Mentor公司的Model Sim、Synopsys公司的VCS、Cadence公司的NC-Verilog和NC-VHDL及Aldec公司的Active-HDL等。通过仿真能及时发现设计中的错误,加快设计进度,提高设计的可靠性。

(3) 综合优化。

综合优化(Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门及RAM和触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的逻辑连接,输出.edf和.edn等标准格式的网表文件,供FPGA/CPLD厂家的布局布线器进行实现。常用的专业综合优化工具有Synplicity公司的Synplify/Synplify Pro、Amplify,Synopsys公司的FPGA Compiler Ⅱ(Synopsys公司将停止发展FPGA Express软件,致力于FPGA Compiler Ⅱ平台的开发),Mentor公司旗下Exemplar Logic公司出品的Leonardo Spectrum和Mentor Graphics公司出品的Precision RTL等。另外,FPGA/CPLD厂商的集成开发环境也自带综合工具。

(4) 综合后仿真。

综合完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。综合后仿真虽然比功能仿真精确一些,但是只能估计门延时,不能估计线延时,仿真结果与布线后的实际情况还有一定的差距,并不十分准确。这种仿真的主要目的在于检查综合器的综合结果是否与设计输入一致。目前主流综合工具日益成熟,对于一般性设计,如果设计者确信自己表述明确,没有综合歧义发生,则可以省略综合后仿真步骤。但是如果在布局布线后仿真时发现有电路结构与设计意图不符的现象,则常常需要回溯到综合后仿真以确认是否是由于综合歧义造成的问题。在功能仿真中介绍的仿真工具一般都支持综合后仿真功能。

(5) 实现与布局布线。

综合结果的本质是一些由与、或、非门及触发器和RAM等基本逻辑单元组成的逻辑网表,它与芯片实际的配置情况还有较大差距。此时应该使用FPGA/CPLD厂商提供的软件工具,根据所选芯片的型号,将综合输出的逻辑网表适配到具体FPGA/CPLD器件上,这个过程就叫作实现过程。因为只有器件开发商最了解器件的内部结构,所以实现步骤必须选用器件开发商提供的工具。在实现过程中最主要的过程是布局布线(PAR,Place And Route):所谓布局(Place)是指将逻辑网表中的硬件原语或底层单元合理地适配到FPGA内部的固有硬件结构上,布局的优劣对设计的最终实现结果(在速度和面积两个方面)影响很大;所谓布线(Route)是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。FPGA的结构相对复杂,为了获得更好的实现结果,特别是保证能够满足设计的时序条件,一般采用时序驱动的引擎进行布局布线,所以对于不同的设计输入,特别是不同的时序约束,获得的布局布线结果一般有较大差异。CPLD结构相对简单得多,其资源有限而且布线资源一般为交叉连接矩阵,故CPLD的布局布线过程相对简单明朗得多,一般被称为适配过程。一般情况下,用户可以通过设置参数指定布局布线的优化准则,总的来说优化目标主要有面积和速度两个方面。一般根据设计的主要矛盾,选择面积或速度或平衡两者等优化目标,但是当两者冲突时,满足时序约束要求更重要一些,此时选择速度或时序优化目标效果更佳。

关于“面积”和“速度”两个设计目标的平衡与互换可以参考人民邮电出版社出版的《Intel FPGA/CPLD设计(高级篇)》中的相关论述。

(6) 时序仿真与验证。

将布局布线的时延信息反标注到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,简称后仿真。布局布线之后生成的仿真时延文件包含的时延信息最全,不仅包含门延时,还包含实际布线延时,所以布线后仿真最准确,能较好地反映芯片的实际工作情况。一般来说,布线后仿真步骤必须进行,通过布局布线后仿真能检查设计时序与FPGA实际运行情况是否一致,确保设计的可靠性和稳定性。布局布线后仿真的主要目的在于发现时序违规(Timing Violation),即不满足时序约束条件或器件固有时序规则(建立时间、保持时间等)的情况。在功能仿真中介绍的仿真工具一般都支持布局布线后仿真功能。

到此我们介绍了FPGA/CPLD设计流程中3个不同阶段的仿真,请大家明确这些仿真的本质和目的,功能仿真的主要目的在于验证语言设计的电路结构和功能是否和设计意图相符;综合后仿真的主要目的在于验证综合后的电路结构是否与设计意图相符、是否存在歧义综合结果;布局布线后仿真即时序仿真的主要目的在于验证是否存在时序违规。这些不同阶段不同层次的仿真配合使用,能够更好地确保设计的正确性,明确问题定位,节约调试时间。

有时为了保证设计的可靠性,在时序仿真后还要做一些验证。验证的手段比较丰富,可以用Quartus Ⅱ内嵌时序分析工具完成静态时序分析(STA,Static Timing Analyzer),也可以用第三方验证工具(如Synopsys的Formality验证工具、Prime Time静态时序分析工具等),还可以用Quartus Ⅱ内嵌的Chip Editor分析芯片内部的连接与配置情况。

(7) 板级仿真与验证。

在有些高速设计情况下还需要使用第三方的板级验证工具进行仿真与验证,如Mentor Tau、Forte Design - Timing Designer、Mentor Hyperlynx、Mentor ICX、Cadence SPECCTRAQuest、Synopsys HSPICE。这些工具通过对设计的IBIS和HSPICE等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰(EMI)等电路特性。

(8) 调试与加载配置。

设计开发的最后步骤就是在线调试或将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪(LA,Logic Analyzer)是逻辑设计的主要调试工具。传统的逻辑功能板级验证手段是用逻辑分析仪分析信号,设计时要求FPGA和PCB设计人员保留一定数量的FPGA管脚作为测试管脚,编写FPGA代码时将需要观察的信号作为模块的输出信号,在综合实现时再把这些输出信号锁定到测试管脚上,然后连接逻辑分析仪的探头到这些测试脚,设定触发条件,进行观测。逻辑分析仪的特点是专业、高速,触发逻辑可以相对复杂。其缺点是价格昂贵(好一些的LA需要几十万甚至上百万元人民币),灵活性差。PCB布线后测试脚的数量就固定了,不能灵活增加,当测试脚不足时会影响测试,如果测试脚太多又影响PCB布局布线。

对于相对简单一些的设计,使用Quartus Ⅱ内嵌的Signal Tap Ⅱ对设计进行在线逻辑分析可以较好地解决上述矛盾。Signal Tap Ⅱ是一种FPGA在线片内信号分析工具,它的主要功能是通过JTAG口,在线、实时地读出FPGA的内部信号。其基本原理是利用FPGA中未使用的Block RAM,根据用户设定的触发条件将信号实时地保存到这些Block RAM中,然后通过JTAG口传送到计算机,最后在计算机屏幕上显示出时序波形。

任何仿真或验证步骤出现问题,就需要根据错误的定位返回到相应的步骤更改或重新设计。1.5 FPGA/CPLD的常用开发工具

本节主要介绍FPGA/CPLD的一些常用EDA开发工具。

Quartus Ⅱ中集成的EDA开发工具可以分为两类,一类是Altera自己提供的软件工具,另一类是其他EDA厂商提供的软件工具,后者统称为第三方工具。

常用的Altera自带FPGA/CPLD开发工具有Text Editor(文本编辑器)、Memory Editor (内存编辑器)、Mega Wizard(IP核生成器)、Schematic Editor(原理图编辑器)、Quartus Ⅱ (内嵌综合工具)、RTL Viewer(寄存器传输级视图观察器)、Assignment Editor(约束编辑器)、Logic Lock(逻辑锁定工具)、Power Fit Fitter(布局布线器)、Timing Analyzer(时序分析器)、Floorplan Editor(布局规划器)、Chip Editor(底层编辑器)、Design Space Explorer (设计空间管理器)、Design Assistant(检查设计可靠性)、Assembler(编程文件生成工具)、Programmer(下载配置工具)、Power Analyzer(功耗仿真器)、Signal Tap Ⅱ(在线逻辑分析仪)、Signal Probe(信号探针)、Qsys(可编程片上系统设计环境)、DSP Builder (内嵌DSP设计环境)、Software Builder(软件开发环境)。

第三方软件指专门的EDA工具生产商提供的设计工具,Quartus Ⅱ集成了与这些设计工具的友好接口,在Quartus Ⅱ中可以直接调用这些工具。第三方工具一般需要License授权方可使用。Quartus Ⅱ中支持的第三方工具接口有Synplify/Synplify Pro综合工具、Amplify综合工具、Precision RTL综合工具、Leonardo Spectrum综合工具、FPGA Compiler Ⅱ综合工具、Model Sim(包括SE和AE版本)仿真工具、Verilog-XL仿真工具、NC-Verilog/VHDL仿真工具、Active-HDL仿真工具、VCS/VSS仿真工具、Prime Time静态时序分析工具以及板级仿真验证工具Mentor Tau、Synopsys HSPICE和Innoveda BLAST等。

限于篇幅,本书只能对常用EDA工具加以讨论。根据设计流程与功能划分,上述EDA工具主要分为设计输入工具、综合工具、仿真工具、实现与优化工具、后端辅助工具、验证与调试工具和系统级设计环境等7类。

一、设计输入工具

设计输入是工程设计的第一步,常用的设计输入方法有HDL语言输入、原理图输入、IP Core输入和其他输入方法。

• HDL语言输入。这种设计输入方法应用最广泛,目前业界最流行的HDL语言是Verilog和VHDL语言,几乎任何文本编辑器都可以完成HDL语言输入。Quartus Ⅱ内嵌的文本编辑器是Text Editor,它能根据语法来彩色显示关键字。另外,大家常用的文本编辑器还有Ultra Edit,通过修改Ultra Edit的WORDFILE.TXT也可以支持彩色语法显示。

• 原理图设计输入方式在早期应用广泛,目前已经逐渐被HDL语言输入方式所取代,仅仅在有些设计的顶层描述时才会使用,所以本书强烈推荐初学者尽量采用HDL语言方式设计电路。Quartus Ⅱ内嵌的原理图编辑器是Schematic Editor。

• IP Core输入方式是FPGA设计中的一个重要设计输入方式。所谓IP Core,是指已经设计好且受知识产权保护的标准模块单元。Quartus Ⅱ的IP Core生成器是Megafunctions/Mega Wizard,它能生成的IP核功能繁多,从简单的基本设计模块到复杂的处理器等一应俱全,适当地使用 IP Core,能大幅度地减轻工程师的设计工作量,提高设计质量。

• 其他辅助性设计输入方法还有状态机输入、真值表输入和波形

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?