0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >技术信息 > EDA技术与FPGA设计应用

EDA技术与FPGA设计应用

2018-02-09
类别:技术信息
eye 169
文章创建人 拍明


---21世纪是电子信息产业主导的知识经济时代,信息领域正在发生一场巨大变革,其先导力量和决定性因素正是微电子集成电路。硅片技术的日益成熟,特别是深亚微米(dsm,deep sub-micron)和超深亚微米(vdsm,very deep sub-micron)技术,极大促进了集成电路产业的快速发展。

---集成电路发展经历了电路集成、功能集成、技术集成,直至今天基于计算机软硬件的知识集成,这标志着传统电子系统已全面进入现代电子系统阶段,这也被誉为进入3g时代,即单片集成度达到1g个晶体管、器件工作速度达到1ghz、数据传输速率达到1gbps。

---eda(electronic design automation,电子设计自动化)技术基于计算机辅助设计,它融合了应用电子技术、计算机技术、信息处理技术、智能化技术的最新成果,以实现电子产品的自动设计。eda是现代电子设计技术的核心,在现代集成电路设计中占据重要地位。fpga(field programmable gate array,现场可编程门阵列)作为可编程逻辑器件的典型代表,它的出现及日益完善适应了当今时代的数字化发展浪潮,它正广泛应用在现代数字系统设计中。

eda技术与fpga原理

1.eda技术特征

---eda是电子设计领域的一场革命,它源于计算机辅助设计(cad,computer aided design)、计算机辅助制造(cam,computer aided made)、计算机辅助测试(cat,computer aided test)和计算机辅助工程(cae,computer aided engineering)。利用eda工具,电子设计师从概念、算法、协议开始设计电子系统,从电路设计、性能分析直到ic版图或pcb版图生成的全过程均可在计算机上自动完成。

---eda代表了当今电子设计技术的最新发展方向,其基本特征是设计人员以计算机为工具,按照自顶向下的设计方法,对整个系统进行方案设计和功能划分,由硬件描述语言完成系统行为级设计,利用先进的开发工具自动完成逻辑编译、化简、分割、综合、优化、布局布线(par,place and route)、仿真及特定目标芯片的适配编译和编程下载,这被称为数字逻辑电路的高层次设计方法。

---作为现代电子系统设计的主导技术,eda具有两个明显特征:即并行工程(concurrent engineering)设计和自顶向下(top-down)设计。其基本思想是从系统总体要求出发,分为行为描述(behaviour description)、寄存器传输级(rtl,register transfer level)描述、逻辑综合(logic synthesis)三个层次,将设计内容逐步细化,最后完成整体设计,这是一种全新的设计思想与设计理念。

2.fpga原理

---今天,数字电子系统的设计方法及设计手段都发生了根本性变化,正由分立数字电路向可编程逻辑器件(pld,programmable logic device)及专用集成电路(asic,application specific integrated circuit)转变。fpga与cpld(programmable logic device,复杂可编程逻辑器件)都属于pld的范畴,它们在现代数字系统设计中正占据越来越重要的地位。

---fpga是由用户编程来实现所需逻辑功能的数字集成电路,它不仅具有设计灵活、性能高、速度快等优势,而且上市周期短、成本低廉。fpga设计与asic前端设计十分类似,在半导体领域中fpga应用日益普及,已成为集成电路中最具活力和前途的产业。同时,随着设计技术和制造工艺的完善,器件性能、集成度、工作频率等指标不断提升,fpga已越来越多地成为系统级芯片设计的首选。

---fpga由pal(可编程阵列逻辑)、gal(通用阵列逻辑)发展而来,其基本设计思想是借助于eda开发工具,用原理图、状态机、布尔表达式、硬件描述语言等方法进行系统功能及算法描述,设计实现并生成编程文件,最后通过编程器或下载电缆用目标器件来实现。

---fpga器件采用逻辑单元阵列(lca,logic cell array)结构、sdram工艺,其中lca由三类可编程单元组成。

---(1)可配置逻辑块(clb,configurable logic block):被称为核心阵列,是实现自定义逻辑功能的基本单元,散布于整个芯片;

---(2)输入/输出模块(iob,input/output block):排列于芯片四周,为内部逻辑与器件封装引脚之间提供可编程接口;

---(3)可编程互连资源(pi,programmable interconnect):包括不同长度的连线线段及连接开关,其功能是将各个可编程逻辑块或i/o块连接起来以构成特定电路。

---全球生产fpga的厂家很多,但影响力最大的是xilinx公司和altera公司,世界上第一片fpga是在20世纪80年代中期xilinx公司率先推出的。不同厂家生产的fpga在可编程逻辑块的规模、内部互连线结构及所采用的可编程元件上存在较大差异,实际使用时应注意区分。

fpga设计应用及优化策略

1.fpga设计层次分析

---fpga设计包括描述层次及描述领域两方面内容。通常设计描述分为6个抽象层次,从高到低依次为:系统层、算法层、寄存器传输层、逻辑层、电路层和版图层。对每一层又分别有三种不同领域的描述:行为域描述、结构域描述和物理域描述。

---系统层是系统最高层次的抽象描述,针对于电子系统整体性能。算法层又称为行为层,它是在系统级性能分析和结构划分后对每个模块的功能描述。算法层所描述的功能、行为最终要用数字电路来实现。而数字电路本质上可视为由寄存器和组合逻辑电路组成,其中寄存器负责信号存储,组合逻辑电路负责信号传输。寄存器传输层描述正是从信号存储、传输的角度去描述整个系统。寄存器和组合逻辑本质上是由逻辑门构成,逻辑层正是从逻辑门组合及连接角度去描述整个系统。

---fpga各个描述层次及综合技术关系如图1所示。传统的综合工具是将寄存器传输级(rtl)的描述转化为门级描述。随着以行为设计为主要标志的新一代系统设计理论的不断成熟,能够将系统行为级描述转化为rtl描述的高层次综合技术不断涌现。

---作为现代集成电路设计的重点与热点,fpga设计一般采用自顶向下、由粗到细、逐步求精的方法。设计最顶层是指系统的整体要求,最下层是指具体的逻辑电路实现。自顶向下是将数字系统的整体逐步分解为各个子系统和模块,若子系统规模较大则进一步分解为更小的子系统和模块,层层分解,直至整个系统中各子模块关系合理、便于设计实现为止。

2.vhdl在fpga设计中的应用

---集成电路设计规模及复杂度不断增大,用传统原理图方法进行系统级芯片设计已不能满足设计要求,而硬件描述语言(hdl,hardware description language)在进行大规模数字系统设计时具有诸多优势,因此利用硬件描述语言进行系统行为级设计已成为fpga与asic设计的主流。目前最流行、最具代表性的硬件描述语言是美国国防部(dod)开发的vhdl(vhsic hardware description language)和gda(gateway design automation)公司开发的verilog hdl。

---vhsic代表very high speed integrated circuit,因此vhdl即甚高速集成电路硬件描述语言。vhdl语法严格,1987年即成为ieee标准,即ieee std 1076-1987,1993年进一步修订成为ieee std 1076-1993。

---vhdl作为ieee标准,已得到众多eda公司支持,其主要优点有:

● 描述能力强,支持系统行为级、寄存器传输级和门级三个层次设计;

● 可读性好、移植性强,其源文件既是程序又是文档,便于复用和交流;

● 支持自顶向下的设计和基于库(library-based)的设计;

● 支持同步、异步及随机电路的设计;

● 与工艺无关,生命周期长。

---vhdl语言主要应用在行为层和寄存器传输层,这两层可充分发挥出vhdl面向高层的优势。利用vhdl实现数字电路的实质是利用综合工具将高层次描述转化为低层次门级描述,其中综合可分为三个层次:高层次综合(high-level synthesis)、逻辑综合(logic synthesis)和版图综合(layout synthesis)。

3.基于vhdl的fpga系统行为级设计

---基于vhdl的fpga设计基本流程及详细流程分别如图2和图3所示,具体包括以下重要环节:设计输入(design entry)、设计综合(design synthesis)、设计约束(design constraints)、设计实现(design implement)、设计仿真(design simulation)和器件编程(device programming)。

---设计输入主要采用hdl(硬件描述语言)、ecs(engineering schematic capture,原理图编辑器)和fsm(finite state machine,有限状态机);

---设计综合就是依据逻辑设计描述和约束条件,利用开发工具进行优化处理,将hdl文件转变为硬件电路实现方案,其实质就是优化设计目标的过程;

---设计约束主要包括设计规则约束、时间约束、面积约束三种,通常时间约束的优先级高于面积约束;

---设计实现对于fpga分为编译规划、布局布线(par,place and route)、程序比特流文件产生;对于cpld则是编译、配置、比特流文件产生;

---设计仿真分为功能仿真和时序时延仿真。功能仿真在设计输入之后、综合之前进行,只进行功能验证,又称为前仿真。时序时延仿真在综合和布局布线之后进行,能够得到目标器件的详细时序时延信息,又称为后仿真;

---器件编程是指在功能仿真与时序时延仿真正确的前提下,将综合后形成的位流编程下载到具体的fpga/cpld芯片中,又称芯片配置。fpga/cpld编程下载通常可使用jtag编程器、prom文件格式器和硬件调试器三种方式,其中jtag(joint test action group,联合测试行动组)是工业标准的ieee 1149.1边界扫描测试的访问接口,用作编程功能可省去专用的编程接口,减少系统引出线,有利于各可编程逻辑器件编程接口的统一,因此应用广泛。

4.fpga设计优化及方案改进

---在fpga设计中,必须首先明确hdl源代码编写非常重要;不同综合工具包含的综合子集不同致使有些hdl语句在某些综合工具中不能综合;同一逻辑功能可用不同hdl语句进行描述,但占用资源却可能差别很大。同时应当深刻理解并发性是硬件描述语言与普通高级语言的根本区别,因而设计硬件电路不能受传统顺序执行思维的束缚。

---此外,我们应当清楚速度优化与面积优化在fpga设计中占有重要地位。

对于大多数数字系统设计而言,速度常常是第一要求,但fpga结构特性、综合工具性能、系统电路构成、pcb制版情况及hdl代码表述都会对工作速度产生重要影响。我们通过在电路结构设计中采用流水线设计、寄存器配平、关键路径法可以进行速度优化。

---(1)流水线设计

---流水线(pipelining)技术在速度优化中相当流行,它能显著提高系统设计的运行速度上限,在现代微处理器、数字信号处理器、mcu单片机、高速数字系统设计中都离不开流水线技术。图4与图5是流水线设计的典型图示,其中图4未使用流水线设计,图5采用了2级流水线设计,在设计中将延时较大的组合逻辑块切割成两块延时大致相等的组合逻辑块,并在这两个逻辑块中插入了触发器,即满足以下关系式:ta=t1+t2,t1≈t2。通过分析可知,图4中fmax≈1/ta;图5中流水线第1级最高工作频率fmax1≈1/t1,流水线第2级最高工作频率fmax2≈1/t2≈1/t1,总设计最高频率为fmax≈fmax1≈fmax2≈1/t1,因此图5设计速度较图4提升了近一倍。流水线工作原理可用图6表示。

---(2)寄存器配平(register balancing)

---寄存器配平是通过配平寄存器之间的组合延时逻辑块来实现速度优化,如图7、图8所示。图7中两个组合逻辑块延时差别过大,导致设计总体工作频率fmax取决于t1,即最大的延时模块,从而使设计整体性能受限。通过对图7设计进行改进,将延时较大的组合逻辑1的部分逻辑转移到组合逻辑2中,成为图8结构,以减小延时t1,使t1≈t2,且满足t1+t2=t1+t2。寄存器配平后的图8结构中fmax≈1/t1>1/t1,从而提高了设计速度。

---(3)关键路径法

---关键路径是指设计中从输入到输出经过的延时最长的逻辑路径,优化关键路径是提高设计工作速度的有效方法。td1>td2,td1>td3,关键路径为延时td1的模块,由于从输入到输出的延时取决于延时最长路径,而与其他延时较小的路径无关,因此减少td1则能改善输入到输出的总延时。

---在优化设计过程中关键路径法可反复使用,直到不可能减少关键路径延时为止。

许多eda开发工具都提供时序分析器可以帮助找到延时最长的关键路径,以便设计者改进设计。对于结构固定的设计,关键路径法是进行速度优化的首选方法,可与其他方法配合使用。

---在fpga设计中,面积优化实质上就是资源利用优化,面积优化有多种实现方法,诸如资源共享、逻辑优化、串行化,其中资源共享使用较多,下面举例说明。

---在利用fpga设计数字系统时经常遇到同一模块需要反复被调用,例如多位乘法器、快速进位加法器等算术模块,它们占用芯片资源很多,使系统成本及器件功耗大幅上升,因而使用资源共享技术能够显著优化资源。是资源共享的一个典型实例,由可见使用资源共享技术节省了一个多位乘法器,从而达到减少资源消耗、优化面积的目的。

---最后针对fpga的设计实现提出一些改进方案,fpga实现分为编译规划、布局布线(par,place and route)、程序比特流文件生成三个阶段,当设计不满足性能指标或不能完全布线时,可进行以下改进工作:

● 使用定时约束(timing constraints);

● 增大布局布线级别(par effort);

● 对关键通路(critical paths)的数字逻辑重新设计;

● 运行重布线(re-entrant routing);

● 运行mppr(multi-pass place & route,多通路布局布线);

● 运行平面布局(floorplan)查看布局图及连通性。

---下面重点介绍re-entrant routing与mppr,它们都可改进布局布线结果,提高系统性能。其中re-entrant routing是指已运行过par后再次运行par,但跳过布局过程直接进行布线。mppr则是根据不同功耗表(cost tables)来运行par多次,通过对每一个par迭代评分来确定最好路径并保留,其中评分依据是未布线的连线个数、连线延迟与时序约束。

结束语

---当今社会,集成电路产业已成为高技术产业群的核心战略产业,已逐渐演化为设计、制造、封装、测试协调发展的产业结构,它正进入以知识产权为创新核心的新时期。这标志着集成电路产业的竞争已由技术竞争、资本竞争进入到智力和知识产权竞争的高级阶段。

---fpga在集成电路设计应用中占有重要地位,现场可编程性是fpga最突出的优点。用户通过利用强大的开发工具,能在最短时间内对fpga内部逻辑进行反复设计及修改,直至满意为止,这大大缩短了产品设计开发周期,提高了最终产品性能。因而fpga以其独有的技术优势在电子设计领域得到越来越广泛的应用。随着科学发展及工艺进步,作为重中之重的集成电路设计业必将遇到更大的挑战及发展机遇。

EDA技术的特点

EDA是电子设计自动化(Electronic Design Automation)的缩写。它是一门正在高速发展的新技术,是以大规模可编程逻辑器件为设计载体以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。可以实现逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化,逻辑布局布线、逻辑仿真。完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片。

2 EDA技术的概念和基本特点

EDA技术是伴随着计算机、集成电路、电子系统的设计发展起来的至今已有30多年的历程,大致可以分为三个发展阶段,20世纪70年代的CAD(计算机辅助设计)阶段:这一阶段的主要特征是利用计算机辅助进行电路原理图编辑、PCB布线,使得设计师从传统高度重复繁杂的绘图劳动中解脱出来。20世纪80年代的CAED(计算机辅助工程设计)阶段:这一阶段的主要特征是以逻辑摸拟、定时分析、故障仿真、自动布局布线为核心,重点解决电路设计的功能检测等问题,使设计能在产品制作之前预知产品的功能与性能。20世纪90年代是EDA(电子设计自动化)阶段:这一阶段的主要特征是以高级描述语言、系统仿真和综合技术为特点,采尉‘自顶向下”的设计理念,将设计前期的许多高层次设计由EDA工具来完成。EDA是电子技术设计自动化也就是能够帮助人们设计电子电路或系统的软件工具。该工具可以在电子产品的各个设计阶段发挥作用,使设计更复杂的电路和系统成为可能。在原理图设计阶段,可以使用EDA中的仿真工具论证设计的正确性。在芯片设计阶段.可以使用EDA中的芯片设计工具设计制作芯片的版图。在电路板设计阶段,可以使用EDA中电路板设计工具设计多层电路板。特别是支持硬件描述语言的EDA工具的出现使复杂数字系统设计自动化成为可能只要用硬件描述语言将数字系统的行为描述正确,就可以进行该数字系统的芯片设计与制造。

EDA代表了当今电子设计技术的最新发展方向,利用EDA工具电子设计师可以从概念、算法、协议等开始设计电子系统大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。设计者采用的设计方法是一种高层次的“自顶向下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错.并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行驶证;然后用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。随着设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次性成功率。随着现代电子产品的复杂度和集成度的日益提高,一般的中小规模集成电路组合己不能满足要求电路设计逐步地从中小规模芯片转为大规模、超大规模芯片,具有高速度、高集成度、低功耗的可编程器件己蓬勃发展起来。

硬件描述语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。硬件描述语言是EDA技术的重要组成部分,是EDA设计开发中很重要的软件工具。VHDL即超高速集成电路硬件描述语言是作为电子设计主流硬件的描述语言。它具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述从而大大简化了硬件设计任务,提高了设计可靠性,用VHDL进行电子系统设计的一个很大的优点是设计者可以专心致力于其功能的实现而不需要对不影响功能与工艺有关的因素花费过多的时间和精力。硬件描述语言可以在三个层次上进行电路描述,其层次由高到低,分为行为级、几级和门电路级。应用VHDL进行电子系统设计有以下优点:(1)VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试只需花较少的精力用于物理实现。(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。

将EDA技术与传统电子设计方法进行比较可以看出,传统的数字系统设计只能在电路板上进行设计是一种搭积木式的方式,使复杂电路的设计、调试十分困难;如果某一过程存在错误,查找和修改十分不便;对于集成电路设计而言设计实现过程与具体生产工艺直接相关因此可移植性差;只有在设计出样机或生产出芯片后才能进行实现,因而开发产品的周期长。而EDA技术则有很大不同,采用可编程器件,通过设计芯片来实现系统功能。采用硬件描述语言作为设计输入和库的引入,设计者定义器件的内部逻辑和管脚,将原来由电路板设计完成的大部分工作改在芯片的设计中进行。由于管脚定义的灵活性,大大减轻了电路图设计和电路板设计的工作量和难度,有效增强了设计的灵活性,提高了工作效率。并且可减少芯片的数量,缩小系统体积,降低能源消耗,提高了系统的性能和可靠性。能全方位地利用计算机自动设计、仿真和调试。

3 EDA技术的应用和发展趋势

EDA技术发展迅猛逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。

在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、掌握用VHDL描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验。如实验教学、课程设计、毕业设计、设计竞赛等均可借助CPLD/FPGA器件,使实验设备或设计出的电子系统具有高可靠性,又经济、快速、容易实现、修改便利,同时可大大提高学生的实践动手能力、创新能力和计算机应用能力。

在科研方面:主要利用电路仿真工具进行电路设计与仿真;利用虚拟仪器进行产品调试;将CPLD/FPGA器件的开发应用到仪器设备中,CPLD/FPGA可直接应用于小批量产品的芯片或作为大批量产品的芯片前期开发。传统机电产品的升级换代和技术改造,CPLD/FPGA的应用可提高传统产品的性能缩小体积,提高技术含量和产品的附加值。作为高等院校有关专业的学生和广大的电子工程师了解和掌握这一先进技术是势在必行,这不仅是提高设计效率的需要.更是时代发展的需求,只有掌握了EDA技术才有能力参与世界电子工业市场的竞争争能生存与发展。随着科技的进步,电子产品的更新日新月异,EDA技术作为电子产品开发研制的源动力,己成为现代电子设计的核心。所以发展EDA技术将是电子设计领域和电子产业界的一场重大的技术革命,同时也对电类课程的教学和科研提出了更深更高的要求。

在产品设计与制造方面:从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在PCB的制作、电子设备的研制与生产、电路板的焊接、制作过程等有重要作用。可以说EDA技术已经成为电子工业领域不可缺少的技术支持。

进入21世纪后,电子技术全方位纳入EDA领域,EDA使得电子领域各学科的界限更加模糊,更加互为包容,突出表现在以下几个方面:使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能;基于EDA工具的ASIC设计标准单元己涵盖大规模电子系统及IP核模块;软硬件IP核在电子行业的产业领域、技术领域和设计应用领域得到进一步确认;soC(System-on-Chip)高效低成本设计技术的成熟。随着半导体技术、集成技术和计算机技术的迅猛发展,电子系统的设计方法和设计手段都发生了很大的变化。传统的‘固定功能集成块十连线”的设计方法正逐步地退出历史舞台而基于芯片的设计方法正成为现代电子系统设计的主流。

FPGA设计的四种常用思想与技巧

FPGA/CPLD的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操作和数据接口的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果!

乒乓操作

“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图1所示。

乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。

图片.png

乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。

乒乓操作的第二个优点是可以节约缓冲区空间。比如在WCDMA基带应用中,1个帧是由15个时隙组成的,有时需要将1整帧的数据延时一个时隙后处理,比较直接的办法是将这帧数据缓存起来,然后延时1个时隙进行处理。这时缓冲区的长度是1整帧数据长,假设数据速率是3.84Mbps,1帧长10ms,则此时需要缓冲区长度是38400位。如果采用乒乓操作,只需定义两个能缓冲1个时隙数据的RAM(单口RAM即可)。

当向一块RAM写数据的时候,从另一块RAM读数据,然后送到处理单元处理,此时每块RAM的容量仅需2560位即可,2块RAM加起来也只有5120位的容量

图片.png


另外,巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如图2所示,数据缓冲模块采用了双口RAM,并在DPRAM后引入了一级数据预处理模块,这个数据预处理可以根据需要的各种数据运算,比如在WCDMA设计中,对输入数据流的解扩、解扰、去旋转等。假设端口A的输入数据流的速率为100Mbps,乒乓操作的缓冲周期是10ms。以下分析各个节点端口的数据速率。

A端口处输入数据流速率为100Mbps,在第1个缓冲周期10ms内,通过“输入数据选择单元”,从B1到达DPRAM1。B1的数据速率也是100Mbps,DPRAM1要在10ms内写入1Mb数据。同理,在第2个10ms,数据流被切换到DPRAM2,端口B2的数据速率也是100Mbps,DPRAM2在第2个10ms被写入1Mb数据。在第3个10ms,数据流又切换到DPRAM1,DPRAM1被写入1Mb数据。

仔细分析就会发现到第3个缓冲周期时,留给DPRAM1读取数据并送到“数据预处理模块1”的时间一共是20ms。有的工程师困惑于DPRAM1的读数时间为什么是20ms,这个时间是这样得来的:首先,在在第2个缓冲周期向DPRAM2写数据的10ms内,DPRAM1可以进行读操作;另外,在第1个缓冲周期的第5ms起(绝对时间为5ms时刻),DPRAM1就可以一边向500K以后的地址写数据,一边从地址0读数,到达10ms时,DPRAM1刚好写完了1Mb数据,并且读了500K数据,这个缓冲时间内DPRAM1读了5ms;在第3个缓冲周期的第5ms起(绝对时间为35ms时刻),同理可以一边向500K以后的地址写数据一边从地址0读数,又读取了5个ms,所以截止DPRAM1第一个周期存入的数据被完全覆盖以前,DPRAM1最多可以读取20ms时间,而所需读取的数据为1Mb,所以端口C1的数据速率为:1Mb/20ms=50Mbps。因此,“数据预处理模块1”的最低数据吞吐能力也仅仅要求为50Mbps。同理,“数据预处理模块2”的最低数据吞吐能力也仅仅要求为50Mbps。换言之,通过乒乓操作,“数据预处理模块”的时序压力减轻了,所要求的数据处理速率仅仅为输入数据速率的1/2。

通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现!

串并转换设计技巧

串并转换是FPGA设计的一个重要技巧,它是数据流处理的常用手段,也是面积与速度互换思想的直接体现。

串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。前面在乒乓操作的图例中,就是通过DPRAM实现了数据流的串并转换,而且由于使用了DPRAM,数据的缓冲区可以开得很大,对于数量比较小的设计可以采用寄存器完成串并转换。如无特殊需求,应该用同步时序设计完成串并之间的转换。比如数据从串行到并行,数据排列顺序是高位在前,可以用下面的编码实现:

prl_temp<={prl_temp,srl_in};

图片.png

其中,prl_temp是并行输出缓存寄存器,srl_in是串行数据输入。

对于排列顺序有规定的串并转换,可以用case语句判断实现。对于复杂的串并转换,还可以用状态机实现。串并转换的方法比较简单,在此不必赘述。

流水线操作设计思想

首先需要声明的是,这里所讲述的流水线是指一种处理流程和顺序操作的设计思想,并非FPGA、ASIC设计中优化时序所用的“Pipelining”。

流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。

流水线设计的结构示意图如图3所示。其基本结构为:将适当划分的n个操作步骤单流向串联起来。流水线操作的最大特点和要求是,数据流在各个步骤的处理从时间上看是连续的,如果将每个操作步骤简化假设为通过一个D触发器(就是用寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流经D触发器,完成每个步骤的操作。流水线设计时序如图4所示。

流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划分合理。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输出直接汇入后级的输入即可;如果前级操作时间大于后级的操作时间,则需要对前级的输出数据适当缓存才能汇入到后级输入端;如果前级操作时间恰好小于后级的操作时间,则必须通过复制逻辑,将数据流分流,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出。

在WCDMA设计中经常使用到流水线处理的方法,如RAKE接收机、搜索器、前导捕获等。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。

数据接口的同步方法

数据接口的同步是FPGA/CPLD设计的一个常见问题,也是一个重点和难点,很多设计不稳定都是源于数据接口的同步有问题。

在电路图设计阶段,一些工程师手工加入BUFT或者非门调整数据延迟,从而保证本级模块的时钟对上级模块数据的建立、保持时间要求。还有一些工程师为了有稳定的采样,生成了很多相差90度的时钟信号,时而用正沿打一下数据,时而用负沿打一下数据,用以调整数据的采样位置。这两种做法都十分不可取,因为一旦芯片更新换代或者移植到其它芯片组的芯片上,采样实现必须从新设计。而且,这两种做法造成电路实现的余量不够,一旦外界条件变换(比如温度升高),采样时序就有可能完全紊乱,造成电路瘫痪。

下面简单介绍几种不同情况下数据接口的同步方法:

1. 输入、输出的延时(芯片间、PCB布线、一些驱动接口元件的延时等)不可测,或者有可能变动的条件下,如何完成数据同步?

对于数据的延迟不可测或变动,就需要建立同步机制,可以用一个同步使能或同步指示信号。另外,使数据通过RAM或者FIFO的存取,也可以达到数据同步目的。

图片.png

把数据存放在RAM或FIFO的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入RAM或者FIFO,然后使用本级的采样时钟(一般是数据处理的主时钟)将数据读出来即可。这种做法的关键是数据写入RAM或者FIFO要可靠,如果使用同步RAM或者FIFO,就要求应该有一个与数据相对延迟关系固定的随路指示信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。对于慢速数据,也可以采样异步RAM或者FIFO,但是不推荐这种做法。

数据是有固定格式安排的,很多重要信息在数据的起始位置,这种情况在通信系统中非常普遍。通讯系统中,很多数据是按照“帧”组织的。而由于整个系统对时钟要求很高,常常专门设计一块时钟板完成高精度时钟的产生与驱动。而数据又是有起始位置的,如何完成数据的同步,并发现数据的“头”呢?

数据的同步方法完全可以采用上面的方法,采用同步指示信号,或者使用RAM、FIFO缓存一下。

找到数据头的方法有两种,第一种很简单,随路传输一个数据起始位置的指示信号即可,对于有些系统,特别是异步系统,则常常在数据中插入一段同步码(比如训练序列),接收端通过状态机检测到同步码后就能发现数据的“头”了,这种做法叫做“盲检测”。

上级数据和本级时钟是异步的,也就是说上级芯片或模块和本级芯片或模块的时钟是异步时钟域的。

前面在输入数据同步化中已经简单介绍了一个原则:如果输入数据的节拍和本级芯片的处理时钟同频,可以直接用本级芯片的主时钟对输入数据寄存器采样,完成输入数据的同步化;如果输入数据和本级芯片的处理时钟是异步的,特别是频率不匹配的时候,则只有用处理时钟对输入数据做两次寄存器采样,才能完成输入数据的同步化。需要说明的是,用寄存器对异步时钟域的数据进行两次采样,其作用是有效防止亚稳态(数据状态不稳定)的传播,使后级电路处理的数据都是有效电平。但是这种做法并不能保证两级寄存器采样后的数据是正确的电平,这种方式处理一般都会产生一定数量的错误电平数据。所以仅仅适用于对少量错误不敏感的功能单元。

为了避免异步时钟域产生错误的采样电平,一般使用RAM、FIFO缓存的方法完成异步时钟域的数据转换。最常用的缓存单元是DPRAM,在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,这样就非常方便的完成了异步时钟域之间的数据交换。

2. 设计数据接口同步是否需要添加约束?

建议最好添加适当的约束,特别是对于高速设计,一定要对周期、建立、保持时间等添加相应的约束。

这里附加约束的作用有两点:

a. 提高设计的工作频率,满足接口数据同步要求。通过附加周期、建立时间、保持时间等约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率,满足接口数据同步要求。

b. 获得正确的时序分析报告。几乎所有的FPGA设计平台都包含静态时序分析工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性能做出评估。静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。

Xilinx和数据接口相关的常用约束有Period、OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER等;Altera与数据接口相关的常用约束有Period、tsu、tH、tco等。


责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: EDA FPGA

相关资讯