Xilinx FPGA高级设计及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 FPGA设计思想

2.1 可综合设计思想

2.1.1 VHDL语言概述

VHDL语言是美国国防部在VHSIC计划(Very High Speed Integrated Circuit Program)研究过程中开发出来的硬件描述语言。此项目的目的是希望综合近20 年来计算机和集成电路技术的最新成果,开发出一套先进的超大规模集成电路(VLSI)设计技术,满足人们对数字集成系统的设计要求。VHDL是一种与实现技术独立的语言,它有如下优点:

(1)支持从系统级到门级电路的描述,同时也支持多层次的混合描述;描述形式可以是结构描述,也可以是行为描述,或二者兼而有之。描述中可以混合并行和串行描述。

(2)既支持自底向上的设计,也支持自顶向下的设计,支持模块化、层次化设计。

(3)支持传输延迟和惯性延迟,可以准确地建立复杂的电路硬件模型。

(4)提供将独立工艺集中于一个设计包的方法,便于VHDL语言作为标准的设计文档保存,也便于设计资源重用。

(5)VHDL语言中的类属提供了向设计实体传送环境信息的能力。

由于VHDL语言自身具有覆盖面广、描述能力强等许多优点,于1987 年被确定为美国硬件描述语言的工业标准。1993年又推出了ANSI/IEEE Std 1076—1993标准。

VHDL语言总体上讲是面向模拟仿真的描述性语言,其中很多语法结构是不可综合的,这给VHDL的推广使用带来了重大困难。1999年推出RTL级的综合标准IEEE Std 1076.6—1999。该标准为将面向模拟的VHDL语言转变成真正用于设计的语言奠定了基础。随着IC设计技术的发展,在RTL级进行可综合的设计便成为VLSI的设计主流。

随着面向专用集成电路(ASIC)设计的需求越来越高,VITAL(VHDL Initiative Towards ASIC Libraries)应运而生,成为IEEE 标准。VITAL 减少了EDA 设计者对工艺库过多的考虑,使其集中精力于工具的开发。对于ASIC设计者来说,VITAL可以提高利用EDA系统建立工艺库和进行与工艺无关的开发能力。经过近20年的研究应用,VHDL硬件描述语言的应用和仿真模拟技术得到长足的发展。目前,基于VHDL语言的设计方法学和VHDL语言的编译系统、RTL级可综合的标准、RTL级综合数据模型、逻辑综合优化和多目标工艺库映射等也被广泛的研究。而且,IC设计的复杂度与设计规模成指数增长,导致模拟仿真速度与综合速度急剧下降。如何解决以上问题,成为当前EDA的研究热点。目前国际上各大EDA公司(Mentor Graphics、Cadence、Synopsys)的产品都支持利用VHDL语言来设计VLSI。可编程逻辑器件(FPGA/CPLD)的供应商(Xilinx、Altera)在其开发环境中也提供了对VHDL的支持,Synplicity公司还推出了面向FPGA应用的Synplify综合工具。

2.1.2 设计层次

设计综合指从硬件的一种描述形式到另一种描述形式的变换,设计的最终目标是得出集成电路的某种可制造的描述形式。集成电路设计是一个分层设计的过程,表2-1是集成电路设计层次的划分。

表2-1 集成电路设计层次

设计描述的最底层次为版图级。版图级用几何图形描述硬件,即用硅表面上的扩散区、多晶硅和金属来表示硬件。

电路级是用有源器件和无源器件的互连关系描述硬件,电路级的基本单元可以为双极型晶体管、MOS晶体管、电阻、电容等。

逻辑级是数字系统设计的主要层次,它的基本单元是与门(AND)、或门(OR)、异或门(XOR)、反向器等逻辑门,以及D触发器、J-K触发器、锁存器等逻辑单元。在这一层次,基本的时序单元是延时。基本电路单元的互连构成逻辑级的结构描述。

寄存器传输级(RTL)最基本的设计单元是寄存器、计数器、多路选择器、算术逻辑单元等。尽管寄存器传输级设计的基本单元也可以继续展开成基本的逻辑门,但在寄存器传输级设计时通常不做这种展开,而是把它们作为整体处理。在寄存器传输级上,通常在时钟周期意义上定义系统,典型的描述方法为在哪个时钟周期中完成哪些运算,且总是假定在两个存储单元之间的运算都是由互连的逻辑门在一个时钟周期内实现的。这一层的主要设计工作是优化、综合、状态编码及工艺映射。这里的优化工作主要指减小完成运算所需要的时钟周期数和逻辑门数。

算法级层次上的设计是由运算步来描述的。电路描述通常是事件驱动的描述,一般有外部环境和内部运算之间交换数据的协议构成。

系统级的基本单元可以是计算机、磁盘驱动器、总线接口等大的数字单元,其行为描述的内容通常是一些性能指标。

2.1.3 可综合描述规范

设计过程中可以把硬件的描述从同一层次的一种描述转换为另一种描述(从行为描述转化为结构描述),也可以把上一层次的描述转换为下一层次的描述。利用计算机辅助设计工具进行这种转换称为自动综合。但是,只将HDL语言翻译成电路结构是无价值的,只有采用优化算法才能使综合系统实用化、产品化。

寄存器传输级的综合是指将寄存器传输级的硬件数据流描述向逻辑级结构描述转换。该过程包括:①编译的过程,它接受VHDL的一种描述,编译成内部需要的数据格式,并区分出组合逻辑电路和时序电路;②分别对组合逻辑电路和时序电路进行与工艺无关的优化;③将中间数据结构向工艺库映射,并将结果生成逻辑级结构描述。寄存器传输级的综合系统(RTLSS)采用两级映射综合过程,其模型如图2-1所示。

图2-1 在寄存器传输级对电路的数据流描述

在寄存器传输级(RTL)对电路的数据流描述可以理解为数据处理的中间结果保存在寄存器中,然后进行下一步的数据处理,并将结果仍保存在寄存器中。

在寄存器传输级描述中,可以将电路分为组合逻辑(功能元件和通路元件)和时序逻辑(存储元件)。寄存器传输级的描述,总是假定在两个寄存器之间的数据处理都可以由互连的逻辑门实现,而且这些逻辑门可以在一个时钟周期内完成相应的运算。硬件的寄存器传输级数据流模型有如下特点:

(1)数据流模型中的信号代表了硬件中数据的实际移动方向及电路的互连关系。

(2)数据流模型中的语句与实际寄存器的结构模型之间存在直接的映射关系。

(3)数据流模型指定了RTL的电路元件之间的连接关系,从而隐含了电路结构。

(4)数据流模型指定了存储单元的复用结构及总线。

(5)数据流模型中明确指定了各个寄存器的驱动时钟。

(6)数据流模型中通常不采用抽象的数据类型。

寄存器传输级描述指定了电路元件的连接关系,隐含了电路结构并指明了电路的时序关系。现在IEEE己经有了可综合的寄存器传输级描述标准,在国外也已经有较成熟的寄存器传输级的综合技术并处于不断发展、完善之中。由于在寄存器传输级进行可综合的设计已经是基于HDL的大规模集成系统设计方法的主流,因此对于可综合的寄存器传输级描述的语法语义规则标准、寄存器传输级的综合技术仍然是当前EDA讨论的主要课题之一。

图2-2 基本电路单元

VHDL中提供了对各种电路进行设计的语法结构。由于进程中顺序语句的灵活性,不同的描述都能表达电路的相同功能,因此对于寄存器传输级的综合,必须要求以上设计描述满足一定的标准。因为VHDL顺序语句比并行语句有更大的灵活性、可读性及能描述更为复杂的电路,所以在此主要讨论利用VHDL顺序语句(if、case、赋值语句)对图2-2的基本电路单元的设计。

2.1.4 组合逻辑电路可综合设计

1. 逻辑门

逻辑门包括与门、非门、或门、或非门、与非门、异或门、与或非门等,是基本的组合逻辑单元。在寄存器传输级可以利用关键字AND,NOT,OR,NOT(OR)、NOT(AND)、XOR等在赋值语句中直接描述。RTLSS根据这些赋值语句的描述生成BDD图,进行优化后映射到和工艺相关的标准元件库中的标准元件。这些标准元件都有预制版图,并在其Verilog或VHDL的描述中带有详细的面积、延时、功耗、扇入和扇出等信息。

2. 三态门与多路选择器

三态门的作用是缓冲数据、增强驱动能力,以及把功能模块和总线连接。IEEE标准中以“Z”表示高阻。RTLSS中根据“Z”推断描述中是否有三态门。三态门的VHDL描述如图2-3(a)所示。多路选择器的设计一般是完全条件的if、case 语句描述。多路选择器的VHDL描述如图2-3(b)和图2-3(c)所示。

图2-3 三态门和4选1多路选择器的VHDL描述

3. 译码器、编码器

译码器和编码器属于比较复杂的组合逻辑电路,有不同if、case语句描述,而且和上、下文语义有关,如图2-4所示。

因为考虑到译码器和编码器的VHDL描述的复杂性,以及目标工艺库(ASIC目标工艺库)可能没有译码器和编码器等组合逻辑元件,大部分的综合器不识别译码器和编码器的VHDL描述,而是将其分解成逻辑门的组合来处理,所以RTLSS中也将其分解成逻辑门的组合来处理,而且不支持在进程语句对同一输出信号多次赋值。如图2-4(a)所示,在赋值语句O< =“0000”中对O赋值,在case语句中又再次赋值,因此视为非法。

4. 加法器、比较器

在寄存器传输级的描述中,赋值语句中操作符号“+”、“-”、“<”、“>”、“=”是加法器和比较器的标志。RTLSS中根据操作符号识别出加法器和比较器,然后根据操作符号两边的操作数确定它们的位数,再例化普通抽象元件库中对应的宏单元。用户也可以利用基本逻辑门对加法器和比较器进行描述,但RTLSS将认为该描述是由基本逻辑门组成的功能部件,而不认为是加法器和比较器。

图2-4 译码器的两种VHDL描述

2.1.5 时序逻辑电路可综合设计

1. 锁存器

锁存器在控制信号有效时,立即响应输入产生输出,因此属于异步操作方式。因其输出仅仅由输入数据确定,所以它属于数据驱动型元件。在RTI描述中,如果一个信号只是在一个条件的某些分支中被赋值,而不是在所有分支中都被赋值(通常是由于使用了不完整的赋值语句),则该信号的前一个值应当被保留。在一个时序进程中,前一个值保留在触发器中,值的反馈是同步的;而在一个组合进程中,前一个值是组合逻辑电路的一个输出,因此值的反馈是异步的,这种异步的反馈由锁存器来实现。对于采用VHDL的寄存器传输级描述,在格式判别中,从不完整的非同步赋值语句中能够综合出锁存器,这种非同步赋值语句中的目标(信号或变量)以一种电平敏感的方式被更新,即所读取的信号都应当出现在一个进程的敏感信号表中,因为锁存器是数据驱动型元件。在子程序中的变量不会综合出锁存器,它们只是起暂存中间数据的作用。

锁存器是电平触发的存储元件。一般将不完全条件if、case语句的描述都理解为锁存器。因此,在寄存器传输级的描述中,对于if、case语句的使用一定要注意是否是完全条件,应该注意避免产生不需要的锁存器元件。锁存器的一般描述如图2-5所示。

图2-5 锁存器的VHDL描述

2. 触发器

触发器为同步操作时序逻辑元件,其输出由输入时钟所规定的时刻的数据输入确定。因此,可将时钟想象为对数据采样的控制。即在由时钟转换所确定的时刻,对数据进行采样。由此可见。触发器应属于时钟驱动元件,这是同步时序电路由时钟实现同步控制的基础。由于触发器是时钟驱动元件,因此,在采用VHDL语言的寄存器传输级描述中,要考虑时钟控制下的赋值语句,在VHDL描述中,对于触发器的综合有如下规则。

(1)每一个同步赋值的信号对应一个触发器。

(2)如果同步赋值语句中的目标变量在未赋值之前就被使用,则该变量可对应一个触发器;否则,其只是作为中间数据的暂存,不产生相对应的硬件电路元件。

(3)一个同步赋值中的目标变量或目标信号不能在其他赋值语句中被赋值,但是一个向量的单个元素可以分别处理。

(4)每个进程只允许有一个时钟。

(5)赋值的目标信号与目标变量的综合方法不同:信号的时序赋值可综合为触发器;变量的时序赋值,只有当变量在赋值之前读取时才采用触发器,否则不采用触发器。

综合器将触发器模块作为组合逻辑电路的一部分来实现,组合逻辑电路模块(及其中的每一个反馈)的每一个输出信号上都有一个触发器。这些组合逻辑模块的输出包括了所有在时序进程中被赋值的信号,因此任何一个在时序进程中被赋值的信号都对应一个触发器。根据以上描述,解释时序进程与组合进程的方式很相似,主要的不同在于时序进程在进程的输出上都有触发器;第二个不同是时序进程中没有锁存器综合,因为反馈信号也是保留在触发器中的。从组合进程中综合出锁存器,那么从时序进程中综合出的则为触发器。上述综合方法在寄存器传输级描述中的直接体现是赋值语句的时钟条件,以及进程的信号敏感表中的信号是时钟,而不是进程读取的信号。

触发器一般为边沿存储元件。同步时钟边沿触发器如图2-6(a)所示;异步复(置)位时钟边沿触发器如图2-6(b)所示。

图2-6 触发器的VHDL描述